欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python實現(xiàn)自動化整理文件的示例代碼

 更新時間:2022年09月05日 11:28:33   作者:夢里逆天  
這篇文章主要介紹了如何通過Python編程完成文件的自動分類、文件和文件夾的快速查找、重復(fù)文件的清理、圖片格式的轉(zhuǎn)換等常見工作,需要的可以參考一下

自動化整理計算機(jī)文件

通過Python編程完成文件的自動分類、文件和文件夾的快速查找、重復(fù)文件的清理、圖片格式的轉(zhuǎn)換等常見工作。

1. 文件的自動分類

根據(jù)文件的擴(kuò)展名將文件分類整理到不同文件夾中。

使用os和shutil模塊

os模塊提供了許多操作文件和文件夾的函數(shù),可對文件或文件夾進(jìn)行新建、刪除、查看屬性以及查找路徑等操作。

shutil模塊提供的函數(shù)可對文件或文件夾進(jìn)行移動、復(fù)制、壓縮等操作。

"""
os模塊提供了許多操作文件和文件夾的函數(shù),可對文件或文件夾進(jìn)行新建、刪除、查看屬性以及查找路徑等操作。
shutil模塊提供的函數(shù)可對文件或文件夾進(jìn)行移動、復(fù)制、壓縮等操作。
"""
import os
import shutil

# 源文件目錄
src_dir = "待分類文件/"
# 輸出文件的目錄
output_dir = '已分類文件/'
files = os.listdir(src_dir)  # 列出src_dir目錄下的所有文件及子文件夾的名稱
print(files)
for f in files:
    # 獲得路徑
    src_path = src_dir + f
    # 判斷是否是文件
    if os.path.isfile(src_path):
        # 獲取文件后綴,與輸出目錄拼接成輸出文件夾路徑
        output_path = output_dir + f.split('.')[-1]
        # 判斷輸出文件夾是否存在,若不存在則需要創(chuàng)建
        if not os.path.exists(output_path):
            os.mkdir(output_path)
        # 將文件移動到輸出目錄中與其擴(kuò)展名對應(yīng)的文件夾中
        shutil.move(src_path, output_path)

測試文件:

效果:

使用pathlib模塊

from pathlib import Path

# 源文件目錄
src_dir_name = "待分類文件/"
# 輸出文件的目錄
output_dir_name = '已分類文件/'

# 使用Path()函數(shù)為源文件夾和目標(biāo)文件夾創(chuàng)建路徑對象
src_dir = Path(src_dir_name)
output_dir = Path(output_dir_name)

# 在源文件夾下查找文件和子文件夾,*表示返回所有文件和子文件夾(完整路徑)
files = src_dir.glob('*')
for f in files:
    # 判斷路徑是否代表文件
    if f.is_file():
        # 獲得輸出文件夾路徑
        output_path = output_dir / f.suffix.strip('.')
        # 判斷輸出文件夾是否存在
        if not output_path.exists():
            # 不存在則創(chuàng)建,parents為True表示創(chuàng)建多級文件夾
            output_path.mkdir(parents=True)
        # 將文件路徑重命名為給定的路徑,實現(xiàn)文件移動
        f.replace(output_path / f.name)

2. 文件和文件夾的快速查找

使用python編寫快速查找文件和文件夾程序,實現(xiàn)精確查找和模糊查找。

精確查找文件和文件夾

from pathlib import Path

while True:
    folder = input("請輸入查找目錄的路徑(如:D:\\):")
    folder = Path(folder.strip())  # 使用Path()函數(shù)創(chuàng)建路徑對象
    # 判斷輸入的路徑是否存在,且是否為目錄
    if folder.exists() and folder.is_dir():
        break
    else:
        print("輸入的路徑有誤,請重新輸入!")
search_word = input("請輸入要查找的文件或文件夾名稱:").strip()  # 獲得輸入的文件或文件夾名稱,去掉首尾空格
"""
glob()函數(shù)和rglob()函數(shù)的區(qū)別:
glob()函數(shù)和rglob()函數(shù)都能使用通配符在指定路徑下查找文件和子文件夾。
區(qū)別在于:
    glob()函數(shù)只進(jìn)行以及查找,而rglob()函數(shù)會進(jìn)行多級查找。
"""
# 使用rglob()函數(shù)在用戶輸入的路徑下查找名稱與指定關(guān)鍵詞完全相同的文件及字文件夾,并將結(jié)果轉(zhuǎn)換成列表
results = list(folder.rglob(pattern=search_word))
if len(results) != 0:
    print(f'在【{folder}】下查找到的結(jié)果如下:')
    for r in results:
        print(r)
else:
    print(f'在【{folder}】下未找到名為【{search_word}】的文件或文件夾!')

效果:

模糊查找文件和文件夾

# author:mlnt
# createdate:2022/8/23
from pathlib import Path

while True:
    folder = input("請輸入查找目錄的路徑(如:D:\\):")
    folder = Path(folder.strip())  # 使用Path()函數(shù)創(chuàng)建路徑對象
    # 判斷輸入的路徑是否存在,且是否為目錄
    if folder.exists() and folder.is_dir():
        break
    else:
        print("輸入的路徑有誤,請重新輸入!")
search_word = input("請輸入要查找的文件或文件夾名稱:").strip()  # 獲得輸入的文件或文件夾名稱,去掉首尾空格
"""
glob()函數(shù)和rglob()函數(shù)的區(qū)別:
glob()函數(shù)和rglob()函數(shù)都能使用通配符在指定路徑下查找文件和子文件夾。
區(qū)別在于:
    glob()函數(shù)只進(jìn)行以及查找,而rglob()函數(shù)會進(jìn)行多級查找。
"""
# 使用rglob()函數(shù)在用戶輸入的路徑下查找名稱與指定關(guān)鍵詞完全相同的文件及字文件夾,并將結(jié)果轉(zhuǎn)換成列表
results = list(folder.rglob(pattern=f'*{search_word}*'))
if len(results) == 0:
    print(f'在【{folder}】下未找到名稱包含【{search_word}】的文件或文件夾!')
else:
    result_folders = []  # 查找到的與關(guān)鍵詞相關(guān)的文件夾
    result_files = []   # 與關(guān)鍵詞相關(guān)的文件
    for r in results:
        if r.is_dir():
            # 如果是目錄(文件夾),則添加到文件夾列表
            result_folders.append(r)
        else:
            result_files.append(r)
    if len(result_folders) != 0:
        print(f'在【{folder}】下查找到的與關(guān)鍵詞{search_word}相關(guān)的文件夾:')
        for f in result_folders:
            print(f)
    if len(result_files) != 0:
        print(f'在【{folder}】下查找到的與關(guān)鍵詞{search_word}相關(guān)的文件如下:')
        for f in result_files:
            print(f)

效果:

3. 自動清理重復(fù)文件

自動清理文件實現(xiàn)步驟:

1.列出指定文件夾下的所有文件;

2.兩兩比較文件內(nèi)容是否相同;

3.如果內(nèi)容相同,則將其中一個文件移動到指定的文件夾中

"""
自動清理文件實現(xiàn)步驟:
1.列出指定文件夾下的所有文件;
2.兩兩比較文件內(nèi)容是否相同;
3.如果內(nèi)容相同,則將其中一個文件移動到指定的文件夾中
"""

# 導(dǎo)入pathlib模塊中的Path()函數(shù)
from pathlib import Path
# 導(dǎo)入filecmp模塊中的cmp()函數(shù),用于進(jìn)行文件的比較
from filecmp import cmp

input_dir = '待處理文件'
output_dir = '重復(fù)文件'
# 創(chuàng)建Path對象
src_folder = Path(input_dir)
output_folder = Path(output_dir)
# 判斷輸出目錄是否存在
if not output_folder.exists():
    # 不存在則創(chuàng)建目錄(多級創(chuàng)建)
    output_folder.mkdir(parents=True)

results = list(src_folder.glob('*'))  # 列出給定目錄下的文件及子文件夾
file_list = []
for r in results:
    # 判斷路徑是否指向一個文件
    if r.is_file():
        # 是則添加到文件列表
        file_list.append(r)

# 遍歷文件列表,并進(jìn)行比較
for i in file_list:
    for j in file_list:
        if i != j and i.exists() and j.exists():
            # 比較兩個文件是否相同
            if cmp(i, j):
                # 如果兩個文件相同,則把其中一個文件移動到指定文件夾
                # 刪除重復(fù)文件j.unlink()
                j.replace(output_folder / j.name)

測試文件:

效果:

4. 批量轉(zhuǎn)換圖片格式

from pathlib import Path
from PIL import Image


input_dir = 'input_images'
output_dir = 'output_images'
# 創(chuàng)建Path對象
src_folder = Path(input_dir)
output_folder = Path(output_dir)
# 判斷輸出目錄是否存在
if not output_folder.exists():
    # 不存在則創(chuàng)建目錄(多級創(chuàng)建)
    output_folder.mkdir(parents=True)

file_list = list(src_folder.glob('*[.jpg|.jpeg]'))  # 查找后綴為jpg或jpeg的圖片
for f in file_list:
    output_file = output_folder / f.name
    # 將路徑的擴(kuò)展名進(jìn)行替換
    output_file = output_file.with_suffix('.png')
    # 保存圖片到指定路徑
    Image.open(f).save(output_file)
    print(f'{f.name}-->格式轉(zhuǎn)換完成!')

測試文件:

效果:

5. 按拍攝日期自動分類圖片

需安裝exifread模塊:

pip install exifread

步驟:

1.列出指定文件夾下的所有圖片;

2.讀取圖片的EXIF(Exchangeable Image File Format)信息,并提取出拍攝日期;

3.將拍攝日期轉(zhuǎn)換為所需格式,然后使用拍攝日期創(chuàng)建文件夾;

4.將圖片移動到拍攝日期對應(yīng)的文件夾中。

"""
步驟:
    1.列出指定文件夾下的所有圖片;
    2.讀取圖片的EXIF(Exchangeable Image File Format)信息,并提取出拍攝日期;pip install exifread
    3.將拍攝日期轉(zhuǎn)換為所需格式,然后使用拍攝日期創(chuàng)建文件夾;
    4.將圖片移動到拍攝日期對應(yīng)的文件夾中。
"""
from pathlib import Path
from datetime import datetime
from exifread import process_file

input_dir = 'input_images'
output_dir = 'output_dir'
# 創(chuàng)建Path對象
src_folder = Path(input_dir)
output_folder = Path(output_dir)
# 判斷輸出目錄是否存在
if not output_folder.exists():
    # 不存在則創(chuàng)建目錄(多級創(chuàng)建)
    output_folder.mkdir(parents=True)

# 查找后綴為jpg或jpeg的圖片
file_list = list(src_folder.glob('*[.jpg|.jpeg]'))
for f in file_list:
    with open(f, 'rb') as fp:
        # 讀取圖片的EXIF信息
        # process_file函數(shù)會將讀取的EXIF信息以字典格式返回
        tags = process_file(fp, details=False)
    # 判斷字典中是否有拍攝日期
    if 'EXIF DateTimeOriginal' in tags.keys():
        dto = str(tags['EXIF DateTimeOriginal'])
        # 將拍攝日期轉(zhuǎn)換成所需格式,作為文件夾名稱
        folder_name = datetime.strptime(dto, '%Y:%m:%d %H:%M:%S').strftime('%Y-%m-%d')
        # 設(shè)置輸出目錄的路徑
        output_path = output_folder / folder_name
        if not output_path.exists():
            output_path.mkdir(parents=True)
        # 將圖片移動到拍攝日期對應(yīng)的文件夾中
        f.replace(output_path / f.name)

測試文件:

效果:

以上就是Python實現(xiàn)自動化整理文件的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于Python整理文件的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python中*args和**kwargs的作用

    Python中*args和**kwargs的作用

    *args和**kwargs,以及單獨的*,**到底是啥作用呢?原理是啥呢?讀完這篇文章你就徹底明白了,感興趣的朋友跟隨小編一起看看吧
    2023-11-11
  • 淺談python中g(shù)et pass用法

    淺談python中g(shù)et pass用法

    這篇文章主要介紹了python中g(shù)et pass用法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • 淺談Python2、Python3相對路徑、絕對路徑導(dǎo)入方法

    淺談Python2、Python3相對路徑、絕對路徑導(dǎo)入方法

    今天小編就為大家分享一篇淺談Python2、Python3相對路徑、絕對路徑導(dǎo)入方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • Python實現(xiàn)的生成格雷碼功能示例

    Python實現(xiàn)的生成格雷碼功能示例

    這篇文章主要介紹了Python實現(xiàn)的生成格雷碼功能,結(jié)合實例形式分析了格雷碼的原理與Python相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2018-01-01
  • Python中的迭代器詳解

    Python中的迭代器詳解

    這篇文章主要介紹迭代器,看完文章你可以了解到什么是可迭代對象、啥是迭代器、如何自定義迭代器、使用迭代器的優(yōu)勢,文中有詳細(xì)的代碼示例,需要的朋友可以參考下
    2023-08-08
  • Matplotlib中文亂碼的3種解決方案

    Matplotlib中文亂碼的3種解決方案

    當(dāng)我們用matplotlib作圖時,往往會發(fā)現(xiàn)中文的文字變成了小方塊,我在繪制決策樹的時候就碰到了這個問題。下面這篇文章主要給大家總結(jié)介紹了關(guān)于Matplotlib中文亂碼的3種解決方案,需要的朋友可以參考下
    2018-11-11
  • Python編程之基于概率論的分類方法:樸素貝葉斯

    Python編程之基于概率論的分類方法:樸素貝葉斯

    這篇文章主要介紹了Python編程之基于概率論的分類方法:樸素貝葉斯,簡單介紹了其概述,貝葉斯理論和條件概率,以及樸素貝葉斯的原理等相關(guān)內(nèi)容,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • python實現(xiàn)把二維列表變?yōu)橐痪S列表的方法分析

    python實現(xiàn)把二維列表變?yōu)橐痪S列表的方法分析

    這篇文章主要介紹了python實現(xiàn)把二維列表變?yōu)橐痪S列表的方法,結(jié)合實例形式總結(jié)分析了Python列表推導(dǎo)式、嵌套、循環(huán)等相關(guān)操作技巧,需要的朋友可以參考下
    2019-10-10
  • Python基礎(chǔ)詳解之描述符

    Python基礎(chǔ)詳解之描述符

    這篇文章主要介紹了Python基礎(chǔ)詳解之描述符,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)python基礎(chǔ)的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • Python Pandas pandas.read_sql_query函數(shù)實例用法分析

    Python Pandas pandas.read_sql_query函數(shù)實例用法分析

    在本篇文章里小編給大家整理的是一篇關(guān)于Python Pandas pandas.read_sql_query函數(shù)實例用法分析內(nèi)容,有興趣的朋友們可以跟著學(xué)習(xí)下。
    2021-06-06

最新評論