本篇推文開始,我將介紹一些常用的Python數據處理小技巧,幫助大家更好的處理數據,提高工作效率。今天我將介紹Python自帶的一個模塊-glob模塊。涉及的內容主要如下:
Python-glob模塊簡介glob模塊通配符glob模塊是python自己帶的一個文件操作模塊,可以查找符合自己需求的的文件,並且支持通配符操作,主要包括以下三種匹配模式:
**匹配所有文件,包括目錄,子目錄和子目錄裡面的文件。下面我們具體舉兩個例子說明一下:
樣例一:當前路徑文件下以 .py結尾的所有文件.
for fname in glob.glob("./*.py"):
print(fname)樣例二:當前路徑文件下以 .python開頭並且有一個字符的所有py文件.
for fname in glob.glob("./python?.py"):
print(fname)樣例三:當前路徑文件下以 .python開頭並且有一個數字的所有py文件.
for fname in glob.glob("./python[0-9].py"):
print(fname)
glob()方法glob模塊的主要方法是glob(),該方法返回的是所有匹配的文件路徑列表,該方法需要一個參數來指定一個路徑(可以是相對或絕對路徑),通常也可以和os.path.join() 方法一起使用。返回值當前路徑下的文件名,注意:不包括子文件夾裡的文件哦。示例如下:
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') #匹配所有gif文件
# ['1.gif', 'donghua.gif','Z.gif']
iglob()方法iglob()方法不同於glob()方法,其返回的是一個迭代器(類似於yield),其結果是一個可遍歷的對象。與glob.glob()同時獲取所有的匹配路徑不同的是,glob.iglob()方法一次只獲取一個匹配路徑。(這個方法較少用到,這裡不再進行介紹)
Python-glob模塊實例應用本節將舉一個具體的示例講解glob.glob()方法的應用,具體為 讀取多個CSV文件中的數據,並將所有數據合併到一個CSV文件 中,這裡我們還使用Pandas庫用於數據處理操作(這也是我日常數據處理中進場使用大方法哦)。其基本過程文字敘述如下:「將每個輸入文件中讀取到pandas數據框中,再將所有的數據框追加到一個數據框列表中,最後使用pandas.concat()函數將所有數據框連接成一個數據框」,其中concat()函數可以使用axis參數來設置連結數據框的方式,如下:
代碼表示如下:
import pandas as pd
import glob
import os
input_path = "" #數據所有文件所在路徑
out_file = "" # 輸出路徑
# 使用glob.glob()通配符找出所有以.csv結尾的文件
all_files = glob.glob(os.path.join(input_path,"*.csv"))all_data_
#數據框列表
all_data_frames = []
#循環操作文件
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)經過以上代碼的運行,即可將所有具有相似數據形式的csv文件進行合併,大大提高數據處理效率。當然,以上代碼只是列舉了CSV文件,其實,對所有相同文件或具有特定字符串文件名的所有文件都可以通過glob.glob()方法進行批量處理,希望大家可以多使用該方法進行多個文件的批量操作。
總結本期推文介紹了一個在日常工作中經常使用到的文件操作小技巧即:使用 glob.glob() 批量處理多個文件,進行自動化和規模化的數據處理操作,並具體舉出批量合併多個CSV文件的具體代碼實例幫助大家更好的理解操作,希望大家可以掌握這個Python內置的文件處理模塊glob。