如何用os.walk()结合CSV文件递归搜索指定文件内容?
我来帮你补全这个CSV内容搜索的代码!结合你的需求,我整理了一份完整的实现,包含递归遍历目录、CSV文件读取和目标内容匹配的逻辑,你可以直接参考使用:
完整代码实现
import os import csv # 定义要搜索的目标内容 TARGET_STRINGS = ["XZOXNEOXXTWX", "YOEYTWOYZYNY"] # 定义要遍历的根目录 ROOT_DIR = "你的rootDir路径" # 替换成实际的根目录路径 def search_csv_for_targets(root_dir): # 递归遍历目录下的所有文件 for dirpath, _, filenames in os.walk(root_dir): for filename in filenames: # 只处理CSV文件 if filename.lower().endswith(".csv"): file_path = os.path.join(dirpath, filename) print(f"正在检查文件: {file_path}") try: # 打开CSV文件,处理编码问题 with open(file_path, 'r', encoding='utf-8', newline='') as csvfile: reader = csv.reader(csvfile) # 遍历每一行,记录行号 for row_num, row in enumerate(reader, start=1): # 遍历该行的每个单元格 for cell in row: # 检查当前单元格是否包含目标字符串 for target in TARGET_STRINGS: if target in cell: print(f"找到匹配内容!") print(f"文件路径: {file_path}") print(f"行号: {row_num}") print(f"匹配内容: {target}") print("-" * 50) except Exception as e: print(f"处理文件 {file_path} 时出错: {str(e)}") if __name__ == "__main__": search_csv_for_targets(ROOT_DIR)
关键部分说明
- 递归遍历目录:通过
os.walk()获取目录下的所有文件路径,dirpath是当前遍历的目录,filenames是该目录下的所有文件名。 - 过滤CSV文件:通过
filename.lower().endswith(".csv")确保只处理CSV格式的文件,避免无效操作。 - CSV内容读取:使用
csv.reader逐行读取CSV文件,enumerate(reader, start=1)用来记录行号(从1开始更符合日常阅读习惯)。 - 目标内容匹配:遍历每个单元格,检查是否包含目标字符串,找到匹配时输出详细信息,方便定位。
- 异常处理:捕获文件读取时的异常(比如权限问题、编码错误),避免程序崩溃。
你只需要把代码里的ROOT_DIR替换成实际要遍历的根目录路径,运行后就能自动递归搜索所有CSV文件,找到你需要的两个目标内容啦!
内容的提问来源于stack exchange,提问作者KXA.Pytho3
相关产品推荐
相关产品推荐

