今天我将介绍Python自带的一个文件操作模块-glob模块。涉及的内容主要如下:
- Python-glob模块简介
- Python-glob模块实例应用
Python-glob模块简介
glob模块通配符
glob模块是python自己带的一个文件操作模块,可以查找符合自己需求的的文件,并且支持通配符操作,主要包括以下三种匹配模式:
- *代表0个或多个字符。
- **匹配所有文件,包括目录,子目录和子目录里面的文件。
- ?代表一个字符。
- []匹配指定范围内的字符,如[0-9]匹配数字。
- [!] 匹配不在指定范围内的字符。
下面我们具体举两个例子说明一下:
样例一:当前路径文件下以 .py结尾的所有文件.
代码语言:javascript复制for fname in glob.glob("./*.py"):
print(fname)
样例二:当前路径文件下以 .python开头并且有一个字符的所有py文件.
代码语言:javascript复制for fname in glob.glob("./python?.py"):
print(fname)
样例三:当前路径文件下以 .python开头并且有一个数字的所有py文件.
代码语言:javascript复制for fname in glob.glob("./python[0-9].py"):
print(fname)
glob()方法
glob模块的主要方法是glob(),该方法返回的是所有匹配的文件路径列表,该方法需要一个参数来指定一个路径(可以是相对或绝对路径),通常也可以和os.path.join() 方法一起使用。返回值当前路径下的文件名,注意:不包括子文件夹里的文件哦。示例如下:
代码语言:javascript复制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参数来设置链接数据框的方式,如下:
- axis=0表示从头到尾垂直堆叠。
- aixs=1表示并排平行堆叠。
代码表示如下:
代码语言:javascript复制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。
如果大家觉得还不错可以关注这位小伙伴的号,内容非常干货.