使用os.walk批量转TXT为CSV并按文件夹合并,代码无输出求排查
解决按州文件夹合并TXT到CSV的问题
让我来帮你排查代码里的问题,顺便给出能实现需求的修正版本~
你的代码存在这些核心问题:
- 路径处理错误:你直接用
filename打开文件,但os.walk返回的filename只是单纯的文件名,不是完整路径,必须用os.path.join(root, filename)才能定位到文件。另外'*.txt'、'*.csv'是通配符,不是合法的文件名,Python根本无法识别。 - 输出逻辑完全偏离需求:你每次循环都试图写入一个叫
'*.csv'的无效文件,而且会覆盖之前的内容,完全没做到按州文件夹合并的要求。 - 内容写入错误:
out_csv.writerows(filename)是把文件名的每个字符当成一行写入CSV,而不是读取TXT文件里的内容写入,这完全搞错了写入对象。 - 文件模式不兼容:在Python3中使用
csv模块时,建议用文本模式('r'/'w')而非二进制模式('rb'/'wb'),同时指定编码能避免乱码问题。
修正后的代码(实现按州合并TXT为CSV)
import os import csv # 替换成你的States文件夹实际路径,比如 './States' 或者绝对路径 base_path = '/path/to/your/States' # 遍历States下的每个州子文件夹 for state_dir in os.listdir(base_path): state_dir_full_path = os.path.join(base_path, state_dir) # 跳过非文件夹的项目 if not os.path.isdir(state_dir_full_path): continue # 生成对应州的CSV文件名,比如 arizona_files.csv output_csv_filename = f"{state_dir.lower()}_files.csv" output_csv_full_path = os.path.join(base_path, output_csv_filename) # 打开输出CSV文件,准备写入 with open(output_csv_full_path, 'w', newline='', encoding='utf-8') as csv_output_file: csv_writer = csv.writer(csv_output_file, delimiter='\t') # 保持和你原代码一致的制表符分隔 # 遍历当前州文件夹下的所有TXT文件 for txt_filename in os.listdir(state_dir_full_path): if txt_filename.endswith('.txt'): txt_file_full_path = os.path.join(state_dir_full_path, txt_filename) # 读取TXT内容并写入CSV with open(txt_file_full_path, 'r', encoding='utf-8') as txt_input_file: csv_reader = csv.reader(txt_input_file, delimiter='\t') csv_writer.writerows(csv_reader) print(f"✅ 已完成合并:{output_csv_full_path}")
代码关键说明:
- 精准路径定位:全程用
os.path.join拼接完整路径,确保无论你的文件夹在哪里都能正确找到文件。 - 按州合并逻辑:先遍历每个州的子文件夹,为每个州单独创建一个CSV文件,再把该州下所有TXT的内容逐行追加进去。
- 安全的文件操作:使用
with语句自动管理文件的打开/关闭,避免忘记关闭文件导致的资源泄漏。 - 编码与格式优化:指定
encoding='utf-8'避免特殊字符乱码,newline=''是csv模块的推荐写法,防止生成的CSV出现多余空行。
内容的提问来源于stack exchange,提问作者user9264558
相关产品推荐
相关产品推荐

