glob - 被忽略的python超強文件批量處理模塊
今天我將介紹Python自帶的一個文件操作模塊-glob模塊。涉及的內(nèi)容主要如下:
Python-glob模塊簡介 Python-glob模塊實例應(yīng)用
Python-glob模塊簡介
glob模塊通配符
glob模塊是python自己帶的一個文件操作模塊,可以查找符合自己需求的的文件,并且支持通配符操作,主要包括以下三種匹配模式:
*代表0個或多個字符。 **匹配所有文件,包括目錄,子目錄和子目錄里面的文件。 ?代表一個字符。 []匹配指定范圍內(nèi)的字符,如[0-9]匹配數(shù)字。 [!] 匹配不在指定范圍內(nèi)的字符。
下面我們具體舉兩個例子說明一下:
樣例一:當(dāng)前路徑文件下以 .py結(jié)尾的所有文件.
for fname in glob.glob("./*.py"):
print(fname)
樣例二:當(dāng)前路徑文件下以 .python開頭并且有一個字符的所有py文件.
for fname in glob.glob("./python?.py"):
print(fname)
樣例三:當(dāng)前路徑文件下以 .python開頭并且有一個數(shù)字的所有py文件.
for fname in glob.glob("./python[0-9].py"):
print(fname)
glob()方法
glob模塊的主要方法是glob(),該方法返回的是所有匹配的文件路徑列表,該方法需要一個參數(shù)來指定一個路徑(可以是相對或絕對路徑),通常也可以和os.path.join() 方法一起使用。返回值當(dāng)前路徑下的文件名,注意:不包括子文件夾里的文件哦。示例如下:
import glob
# 絕對路徑:
glob.glob(r'c:\*.xlsx') #獲得C盤下的所有xlsx文件
glob.glob(r'E:\pic\*\*.png') # 獲得指定目錄下的所有png文件
# 相對路徑:
glob.glob(r'../*.R')
# 通配符操作
glob.glob('./[0-9].*')
# ['./1.gif', './2.txt','/4.py']
glob.glob('*.gif') #匹配所有g(shù)if文件
# ['1.gif', 'donghua.gif','Z.gif']
iglob()方法
iglob()方法不同于glob()方法,其返回的是一個迭代器(類似于yield),其結(jié)果是一個可遍歷的對象。與glob.glob()同時獲取所有的匹配路徑不同的是,glob.iglob()方法一次只獲取一個匹配路徑。(這個方法較少用到,這里不再進(jìn)行介紹)
Python-glob模塊實例應(yīng)用
本節(jié)將舉一個具體的示例講解glob.glob()方法的應(yīng)用,具體為 讀取多個CSV文件中的數(shù)據(jù),并將所有數(shù)據(jù)合并到一個CSV文件 中,這里我們還使用Pandas庫用于數(shù)據(jù)處理操作(這也是我日常數(shù)據(jù)處理中進(jìn)場使用大方法哦)。其基本過程文字?jǐn)⑹鋈缦拢?strong style="color: rgb(145, 109, 213);">「將每個輸入文件中讀取到pandas數(shù)據(jù)框中,再將所有的數(shù)據(jù)框追加到一個數(shù)據(jù)框列表中,最后使用pandas.concat()函數(shù)將所有數(shù)據(jù)框連接成一個數(shù)據(jù)框」,其中concat()函數(shù)可以使用axis參數(shù)來設(shè)置鏈接數(shù)據(jù)框的方式,如下:
axis=0表示從頭到尾垂直堆疊。 aixs=1表示并排平行堆疊。
代碼表示如下:
import pandas as pd
import glob
import os
input_path = "" #數(shù)據(jù)所有文件所在路徑
out_file = "" # 輸出路徑
# 使用glob.glob()通配符找出所有以.csv結(jié)尾的文件
all_files = glob.glob(os.path.join(input_path,"*.csv"))all_data_
#數(shù)據(jù)框列表
all_data_frames = []
#循環(huán)操作文件
for file in all_files:
data_frame = pd.read_csv(file,index_col=None)
all_data_frame.append(data_frame)
data_frame_concat = pd.concat(all_data_frames,axis=0,ignore_index=True)
data_frame_concat.to_csv(out_file,index=False)
經(jīng)過以上代碼的運行,即可將所有具有相似數(shù)據(jù)形式的csv文件進(jìn)行合并,大大提高數(shù)據(jù)處理效率。當(dāng)然,以上代碼只是列舉了CSV文件,其實,對所有相同文件或具有特定字符串文件名的所有文件都可以通過glob.glob()方法進(jìn)行批量處理,希望大家可以多使用該方法進(jìn)行多個文件的批量操作。
總結(jié)
本期推文介紹了一個在日常工作中經(jīng)常使用到的文件操作小技巧即:使用 glob.glob() 批量處理多個文件,進(jìn)行自動化和規(guī)模化的數(shù)據(jù)處理操作,并具體舉出批量合并多個CSV文件的具體代碼實例幫助大家更好的理解操作,希望大家可以掌握這個Python內(nèi)置的文件處理模塊glob。
如果大家覺得還不錯可以關(guān)注這位小伙伴的號,內(nèi)容非常干貨。

加入知識星球【我們談?wù)摂?shù)據(jù)科學(xué)】
400+小伙伴一起學(xué)習(xí)!
· 推薦閱讀 ·
送100本Python&數(shù)據(jù)書籍,看看都有哪些?
Python高性能空間數(shù)據(jù)計算包:PyGEOS
