欢迎访问宙启技术站
智能推送

Python函数:如何使用glob模块批量处理文件?

发布时间:2023-06-26 14:57:46

Python是一种极为强大的编程语言,其灵活性和扩展性使得它成为许多领域的首选语言。在数据处理、机器学习和科学计算领域尤为流行。在进行文件处理时,针对多个文件进行批量处理是常见的需求。Python内置了glob模块,可以帮助开发者在快速、高效的方式批量处理文件。

glob模块是一个类Unix shell的文件名模式批量处理工具。利用glob对象中的方法,可以进行多个文件的处理,简单而强大。功能包括:

1. 解析任何文件名

2. 提取文件名的模式

3. 按模式匹配发现文件列表

4. 批量处理文件

在此,我们将为您介绍利用glob模块批量处理文件的基本操作。

1. 使用glob.glob()查找所有文件

利用glob模块可以轻松查找所有指定文件夹下的文件。glob.glob()接收一个字符串参数,指定需要查找的文件路径和文件名规则。

例如,下面的代码可以找到D盘根目录下的所有.py文件:

import glob
file_list = glob.glob('D:/Python/*.py')
print(file_list)

在这个例子中,’D:/Python/’指定了要搜索的文件夹路径,’*.py’是文件名通配符,表示任意以.py结尾的文件。结果将返回指定文件夹下符合通配符规则的所有文件名,也可以返回绝对路径,例如:

['D:/Python/bilibili.py', 'D:/Python/crawler.py', 'D:/Python/redis.py', 'D:/Python/RocketMQ.py']

如果在程序中使用绝对路径,可能会导致程序不可移植。因此建议使用相对路径。

2. 使用glob.glob()查找特定类型的文件

还可以使用通配符查找特定类型的文件。例如,使用通配符*.html,可以查找所有html文件。下面是一个使用通配符*.txt查找所有文本文件的例子:

import glob
file_list = glob.glob('*.txt')
print(file_list)

此时,文件夹路径仅用通配符表示,表示任何当前目录下的.txt文件。

3. 使用glob.iglob()处理大量文件

如果要处理大量文件,请使用glob.iglob()。与glob.glob()不同,glob.iglob()返回一个迭代器而不是一个列表,因此不会一次性返回整个文件列表。

import glob
for filename in glob.iglob('*.txt'):
    print(filename)

这个循环将迭代到所有当前文件夹下的.txt文件。在处理大量文件时,使用glob.iglob()的好处是可以减少内存的使用。因为glob.iglob()不会一次性返回整个文件列表,而是按需完成文件的搜索。

4. 批处理查找文件的操作

在实际应用中,常常需要对一批文件进行批量处理。例如,对一批文件进行复制、移动、重命名、删除、合并等操作。glob模块提供的glob.glob()和glob.iglob()可以很方便地获取文件列表,这为对文件进行批处理提供了很大的便利性。

例如,针对搜索到的所有TXT文件,可以快速执行转换操作。下面是一个将当前目录下所有txt文件转换为HTML文件的例子:

import glob
import os
for filename in glob.glob('*.txt'):
    html_filename = os.path.splitext(filename)[0] + '.html'
    with open(html_filename, 'w') as html_file, \
         open(filename, 'r') as txt_file:
        html_file.write('<html>
')
        for line in txt_file:
            html_file.write('  <p>{0}</p>
'.format(line.rstrip()))
        html_file.write('</html>')

在这个例子中,如果找到一个文件名为example.txt,则会创建一个新的example.html文件,将原始数据从txt文件中转换为HTML格式并保存。在转换过程中,字面值<f>句柄用于同时打开两个文件,一个用于读取.txt文件,另一个用于写入.html文件。

总结

Python的glob模块可以方便地查找指定文件夹下特定类型或名称的文件,并且支持对搜索到的文件进行批量处理。在处理大量文件时可以使用glob.iglob(),以减少内存使用。在实际应用中,glob模块可以帮助开发者快速地搜索和处理大量的文件,从而方便地进行数据处理和科学计算。