如何用Python在多份CSV文件中查找指定泰语词汇并返回文件名列表
解决目录中查找含指定泰语词汇的CSV文件问题
问题描述
我在一个目录中有100多个文件,需要找出其中包含目标泰语词汇的CSV文件。尝试了以下Python代码但无法正常运行:
import pandas as pd import re import os FOLDER_PATH = r'C:\Users\project' list = os.listdir(FOLDER_PATH) def is_name_in_csv(word,csv_file): with open(csv_file,"r") as f: data = f.read() return bool(re.search(word, data)) word = "บัญชีรายรับ" for csv_file in list: if is_name_in_csv(word,csv_file): print(f"find the {word} in {csv_file}")
代码问题分析
- 使用
list作为变量名,覆盖了Python内置的list类型,可能引发后续逻辑错误 os.listdir()仅返回文件名,不是完整文件路径,直接用文件名打开会找不到文件(除非当前工作目录恰好是目标目录)- 未过滤非CSV文件,会遍历目录中所有类型文件,打开非文本文件时可能报错
- 打开文件时未指定编码,泰语属于Unicode字符,默认编码会导致读取乱码,进而让正则匹配失效
修正后的代码
import re import os FOLDER_PATH = r'C:\Users\project' # 避免使用内置关键字作为变量名 file_names = os.listdir(FOLDER_PATH) def is_word_in_csv(word, csv_file_path): # 指定utf-8编码读取文件,确保泰语字符正确解析 with open(csv_file_path, "r", encoding="utf-8") as f: data = f.read() # re默认支持Unicode,直接匹配泰语词汇即可 return bool(re.search(word, data)) target_word = "บัญชีรายรับ" for file_name in file_names: # 仅处理CSV文件 if file_name.lower().endswith(".csv"): full_file_path = os.path.join(FOLDER_PATH, file_name) if is_word_in_csv(target_word, full_file_path): print(f"找到词汇 {target_word} 在文件 {file_name}")
关键修改说明
- 将变量名
list改为file_names,避免与内置类型冲突 - 使用
os.path.join()拼接完整文件路径,确保能正确定位文件 - 添加
.csv后缀过滤逻辑,只处理目标类型文件 - 打开文件时指定
encoding="utf-8",保证泰语字符正常读取 - 调整变量名(如
word改为target_word),提升代码可读性
内容的提问来源于stack exchange,提问作者Tanatchat Laemkom Film
相关产品推荐
相关产品推荐

