python編程—常用文件操作彙總

Python文件IO操作涉及文件讀寫操作,獲取文件後綴名,修改後綴名,獲取文件修改時間,壓縮文件,加密文件等操作。

1 獲取後綴名

import os
file_ext = os.path.splitext('./data/py/test.py')
front,ext = file_ext

In [5]: front
Out[5]: './data/py/test'
In [6]: ext
Out[6]: '.py'

2 文件讀取操作

import os
# 創建文件夾
def mkdir(path):
    isexists = os.path.exists(path)
    if not isexists:
        os.mkdir(path)
# 讀取文件信息
def openfile(filename):
    f = open(filename)
    fllist = f.read()
    f.close()
    return fllist  # 返回讀取內容
 X=openfile('./data/py/test.py')

3 文件寫操作

# 寫入文件信息
# example1
# w寫入,如果文件存在,則清空內容後寫入,不存在則創建
f = open(r"./data/test.txt", "w", encoding="utf-8")
print(f.write("測試文件寫入"))
f.close

# example2
# a寫入,文件存在,則在文件內容後追加寫入,不存在則創建
f = open(r"./data/test.txt", "a", encoding="utf-8")
print(f.write("測試文件寫入"))
f.close

# example3
# with關鍵字系統會自動關閉文件和處理異常
with open(r"./data/test.txt", "w") as f:
    f.write("hello world!")

4 批量修改文件後綴

本例子使用Python的os模塊和 argparse模塊,將工作目錄work_dir下所有後綴名爲old_ext的文件修改爲後綴名爲new_ext。通過本例子,大家將會大概清楚argparse模塊的主要用法。

導入模塊

import argparse
import os

定義腳本參數

def get_parser():
    parser = argparse.ArgumentParser(description='工作目錄中文件後綴名修改')
    parser.add_argument('work_dir',metavar='WORK_DIR',type=str,nargs=1,
                        help='修改後綴名的文件目錄')
    parser.add_argument('old_ext', metavar='OLD_EXT',
                        type=str, nargs=1, help='原來的後綴')
    parser.add_argument('new_ext', metavar='NEW_EXT',
                        type=str, nargs=1, help='新的後綴')
    return parser

後綴名批量修改

def batch_rename(work_dir, old_ext, new_ext):
    """
    傳遞當前目錄,原來後綴名,新的後綴名後,批量重命名後綴
    """
    for filename in os.listdir(work_dir):
        # 獲取得到文件後綴
        split_file = os.path.splitext(filename)
        file_ext = split_file[1]
        # 定位後綴名爲old_ext 的文件
        if old_ext == file_ext:
            # 修改後文件的完整名稱
            newfile = split_file[0] + new_ext
            # 實現重命名操作
            os.rename(
                os.path.join(work_dir, filename),
                os.path.join(work_dir, newfile)
            )
    print("完成重命名")
    print(os.listdir(work_dir))

主函數實現Main

def main():
    """
    main函數
    """
    # 命令行參數
    parser = get_parser()
    args = vars(parser.parse_args())
    # 從命令行參數中依次解析出參數
    work_dir = args['work_dir'][0]
    old_ext = args['old_ext'][0]
    if old_ext[0] != '.':
        old_ext = '.' + old_ext
    new_ext = args['new_ext'][0]
    if new_ext[0] != '.':
        new_ext = '.' + new_ext
    batch_rename(work_dir, old_ext, new_ext)

5 xls批量轉換成xlsx

import os
def xls_to_xlsx(work_dir):
    """
    傳遞當前目錄,原來後綴名,新的後綴名後,批量重命名後綴
    """
    old_ext, new_ext = '.xls', '.xlsx'
    for filename in os.listdir(work_dir):
        # 獲取得到文件後綴
        split_file = os.path.splitext(filename)
        file_ext = split_file[1]
        # 定位後綴名爲old_ext 的文件
        if old_ext == file_ext:
            # 修改後文件的完整名稱
            newfile = split_file[0] + new_ext
            # 實現重命名操作
            os.rename(
                os.path.join(work_dir, filename),
                os.path.join(work_dir, newfile)
            )
    print("完成重命名")
    print(os.listdir(work_dir))0
實例測試:
xls_to_xlsx('./data')

6 獲取指定後綴名的文件

import os
def find_file(work_dir,extension='jpg'):
    lst = []
    for filename in os.listdir(work_dir):
        print(filename)
        splits = os.path.splitext(filename)
        ext = splits[1] # 拿到擴展名
        if ext == '.'+extension:
            lst.append(filename)
    return lst
r = find_file('.','md') 
print(r) # 返回所有目錄下的md文件

7 批量獲取文件修改時間

# 獲取目錄下文件的修改時間
import os
from datetime import datetime
print(f"當前時間:{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")

def get_modify_time(indir):
    for root, _, files in os.walk(indir):  # 循環D:\works目錄和子目錄
        for file in files:
            absfile = os.path.join(root, file)
            modtime = datetime.fromtimestamp(os.path.getmtime(absfile))
            now = datetime.now()
            difftime = now-modtime
            if difftime.days < 20:  # 條件篩選超過指定時間的文件
                print(f"""{absfile}
                    修改時間[{modtime.strftime('%Y-%m-%d %H:%M:%S')}]
                    距今[{difftime.days:3d}天{difftime.seconds//3600:2d}時      
                    {difftime.seconds%3600//60:2d}]""")  # 打印相關信息
實例測試:
get_modify_time('./data')
輸出效果:
當前時間:2019-12-22 16:38:53
./data\cut_words.csv
                    修改時間[2019-12-21 10:34:15]
                    距今[  164]

8 批量壓縮文件

import zipfile  # 導入zipfile,這個是用來做壓縮和解壓的Python模塊;
import os
import time
def batch_zip(start_dir):
    start_dir = start_dir  # 要壓縮的文件夾路徑
    file_news = start_dir + '.zip'  # 壓縮後文件夾的名字

    z = zipfile.ZipFile(file_news, 'w', zipfile.ZIP_DEFLATED)
    for dir_path, dir_names, file_names in os.walk(start_dir):
        # 這一句很重要,不replace的話,就從根目錄開始複製
        f_path = dir_path.replace(start_dir, '')
        f_path = f_path and f_path + os.sep  # 實現當前文件夾以及包含的所有文件的壓縮
        for filename in file_names:
            z.write(os.path.join(dir_path, filename), f_path + filename)
    z.close()
    return file_news
測試用例:
batch_zip('./data/ziptest')

9 文件加密—32位加密

import hashlib
# 對字符串s實現32位加密
def hash_cry32(s):
    m = hashlib.md5()
    m.update((str(s).encode('utf-8')))
    return m.hexdigest()
print(hash_cry32(1))  # c4ca4238a0b923820dcc509a6f75849b
print(hash_cry32('hello'))  # 5d41402abc4b2a76b9719d911017c592

關於文件加密和解密的詳細資料,參見:Python之數據加密與解密及相關操作

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章