10個關於文件操做的小功能,都很實用~

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 批量修改文件後綴編程

本例子使用Python的os模塊和 argparse模塊,將工做目錄work_dir下全部後綴名爲old_ext的文件修改成後綴名爲new_extapp

經過本例子,你們將會大概清楚argparse模塊的主要用法。ide

導入模塊函數

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)

3 從路徑中提取文件ui

In [11]: import os
    ...: file_ext = os.path.split('./data/py/test.py')
    ...: ipath,ifile = file_ext
    ...:

In [12]: ipath
Out[12]: './data/py'

In [13]: ifile
Out[13]: 'test.py'

4 查找指定後綴名的文件spa

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文件

5 批量轉換xls文件爲xlsx

#批量轉換文件xls-xlsx
import win32com.client as win32
import os.path
import os


def xls2xlsx():    
    rootdir = r"C:\Users\CQ375\Desktop\temp1" #須要轉換的xls文件存放處
    rootdir1 = r"C:\Users\CQ375\Desktop\ex" #轉換好的xlsx文件存放處
    files = os.listdir(rootdir) #列出xls文件夾下的全部文件
    num = len(files) #列出全部文件的個數
    for i in range(num): #按文件個數執行次數
        kname = os.path.splitext(files[i])[1] #分離文件名與擴展名,返回(f_name, f_extension)元組
        if kname == '.xls': #斷定擴展名是否爲xls,屏蔽其它文件
            fname = rootdir + '\\' + files[i] #合成須要轉換的路徑與文件名
            fname1 = rootdir1 + '\\' + files[i] #合成準備存放轉換好的路徑與文件名
            excel = win32.gencache.EnsureDispatch('Excel.Application') #調用win32模塊
            wb = excel.Workbooks.Open(fname) #打開須要轉換的文件
            wb.SaveAs(fname1+"x", FileFormat=51) #文件另存爲xlsx擴展名的文件
            wb.Close()
            excel.Application.Quit()
            
            
if __name__ == '__main__':
    xls2xlsx()

6 目錄下全部文件的修改時間

import os
import datetime
print(f"當前時間:{datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
for root,dirs,files in os.walk(r"D:\works"):#循環D:\works目錄和子目錄
    for file in files:
        absPathFile=os.path.join(root,file)
        modefiedTime=datetime.datetime.fromtimestamp(os.path.getmtime(absPathFile))
        now=datetime.datetime.now()
        diffTime=now-modefiedTime
        if diffTime.days<20:#條件篩選超過指定時間的文件
            print(f"{absPathFile:<27s}修改時間[{modefiedTime.strftime('%Y-%m-%d %H:%M:%S')}]\
距今[{diffTime.days:3d}天{diffTime.seconds//3600:2d}時{diffTime.seconds%3600//60:2d}]")#打印相關信息

7 批量壓縮文件夾和文件

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')

8 文件讀操做

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  # 返回讀取內容

9 文件寫操做

# 寫入文件信息
# 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!")

10 分詞並保存文件

pkuseg是北大開源的一箇中文分詞工具包,它在多個分詞數據集上都有很是高的分詞準確率,比常常使用的jieba分詞性能和效果要更好。

下面使用pkusegcut函數,分詞後統計前10頻率詞,並按照全部詞的頻次由高到低寫入到文件cut_words.csv 中。

這是須要切分的段落:

mystr = """Python 語言參考 描述了 Python 語言的具體語法和語義,
這份庫參考則介紹了與 Python 一同發行的標準庫。
它還描述了一般包含在 Python 發行版中的一些可選組件。
Python 標準庫很是龐大,所提供的組件涉及範圍十分普遍,
正如如下內容目錄所顯示的。這個庫包含了多個內置模塊 (以 C 編寫),
Python 程序員必須依靠它們來實現系統級功能,
例如文件 I/O,此外還有大量以 Python 編寫的模塊,
提供了平常編程中許多問題的標準解決方案。
其中有些模塊通過專門設計,
經過將特定平臺功能抽象化爲平臺中立的 API 來鼓勵和增強 Python 程序的可移植性。
Windows 版本的 Python 安裝程序一般包含整個標準庫,
每每還包含許多額外組件。對於類 Unix 操做系統,
Python 一般會分紅一系列的軟件包,
所以可能須要使用操做系統所提供的包管理工具來獲取部分或所有可選組件。"""

幾行代碼就完成上述工做:

from pkuseg import pkuseg
from collections import Counter

seg = pkuseg()
words = seg.cut(mystr)
frequency_sort = Counter(words).most_common()
with open('./data/cut_words.csv', 'w') as f:
    for line in frequency_sort:
        f.write(str(line[0])+',' + str(line[1])+"\n")

print('writing done')

出現最高頻的前10個詞語:

Counter(words).most_common(10)
# [('的', 12), (',', 11), ('Python', 10), ('。', 7), ('了', 5), ('包含', 4), ('組件', 4), ('標準庫', 3), ('一般', 3), ('所', 3)]
相關文章
相關標籤/搜索