当我们需要处理大量的文件时,手动处理会变得非常繁琐和耗时。而使用Python遍历文件目录和批量处理同类文件,可以大量提高处理效率,提高工作效能。下面将给出详细的攻略。
1. 遍历文件目录
使用os模块遍历文件目录
使用os模块可以实现遍历文件目录的功能,os模块是Python内置的提供访问操作系统功能的模块,可以操作文件、文件夹和进程等。
首先看下列使用os模块遍历文件目录的示例:
import os
# 获取指定目录下的所有文件和文件夹名
def get_all_files_in_folder(folder_path):
return os.listdir(folder_path)
# 判断指定路径是否是文件夹
def is_folder(path):
return os.path.isdir(path)
# 递归获取指定目录下的所有文件
def get_all_files_recursively(folder_path):
all_files = []
for filename in os.listdir(folder_path):
# 构建当前文件的绝对路径
path = os.path.join(folder_path, filename)
if is_folder(path):
# 递归获取子目录下的所有文件
all_files.extend(get_all_files_recursively(path))
else:
all_files.append(path)
return all_files
上述代码中,我们使用了os.listdir(folder_path)
方法获取指定路径下的所有文件和文件夹名,并且使用os.path.isdir(path)
方法判断一个路径是否是文件夹。当获取到一个路径是文件夹时,我们就可以通过递归实现获取子目录下的所有文件。
调用第三方库os.scandir()遍历文件目录
Python 3.5之后出现了一个新的方法,os.scandir(),这个方法比os.listdir()更高效。os.scandir()通过使用迭代器遍历目录树,获得每一个文件和目录。下面是使用os.scandir()遍历文件目录的示例:
import os
# 获取指定目录下的所有文件和文件夹名
def get_all_files_in_folder(folder_path):
return [f.name for f in os.scandir(folder_path)]
# 递归获取指定目录下的所有文件
def get_all_files_recursively(folder_path):
all_files = []
for entry in os.scandir(folder_path):
if entry.is_dir():
# 递归获取子目录下的所有文件
all_files.extend(get_all_files_recursively(entry.path))
else:
all_files.append(entry.path)
return all_files
与使用os模块相比,使用os.scandir()能够进一步提高文件遍历的效率。
2. 批量处理同类文件
当我们需要针对同一类文件进行批量处理时,首先需要找到指定的文件,并将它们进行处理。下面是一个批量处理csv文件的示例:
import os
import pandas as pd
def batch_process_csv_files(folder_path):
# 获取文件名以.csv结尾的所有文件
csv_files = [f for f in os.listdir(folder_path) if f.endswith(".csv")]
for csv_file in csv_files:
# 读取csv文件
df = pd.read_csv(os.path.join(folder_path, csv_file))
# 进行数据处理
# ...
# 将处理后的数据写入到原文件中
df.to_csv(os.path.join(folder_path, csv_file), index=False)
上述代码中,我们首先使用os.listdir(folder_path)
方法获取指定路径下的所有文件名,并筛选出所有以.csv结尾的文件。接着,我们使用Pandas读取csv文件中的数据进行批量处理,使用to_csv方法重新写入到修改过的csv文件中。
另外,我们也可以使用Pillow库分别读取不同的图像文件,并将它们进行处理、转换等操作:
import os
from PIL import Image
def batch_process_image_files(folder_path):
# 获取文件名以.png或.jpg结尾的所有文件
image_files = [os.path.join(folder_path, f) for f in os.listdir(folder_path) if f.endswith(".png") or f.endswith(".jpg")]
for image_file in image_files:
# 打开图像文件
with Image.open(image_file) as img:
# 进行图像处理
# ...
# 保存修改后的图像文件
img.save(image_file)
上述代码中,我们首先使用os.listdir(folder_path)
方法获取指定路径下的所有文件名,并筛选出所有以.png或.jpg结尾的文件。接着,我们使用Pillow库打开图像文件进行批量处理,并使用save方法重新保存修改过的图像文件。
综上所述,以上就是Python遍历文件目录和批量处理同类文件的完整攻略,希望对你有帮助!
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python遍历文件目录、批量处理同类文件 - Python技术站