You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python将TXT内容写入CSV单单元格并关联文件名

问题解决思路与修正代码

为啥会出问题?

  • 文本被拆成单个字符:writerow() 函数需要接收列表/元组这类可迭代对象,直接传字符串的话,它会把每个字符当成单独的单元格内容,自然就拆得稀碎。必须把文件名和文本打包成一个列表传进去。
  • 没包含文件名:之前的代码只写了文本内容,没把当前处理的文件名一起写入,循环时把文件名和文本放在同一行就行。

顺便优化的小细节

  • 原代码里file_list在os.walk循环内初始化,会导致最后只保留最后一个目录下的TXT文件,得把file_list = []移到循环外面。
  • 每次循环都打开关闭CSV文件太折腾,不如一次性打开,写完所有内容再关闭,效率更高。
  • 加个CSV表头,打开文件时能一眼分清列的含义。

修正后的完整代码

import os
import csv  # 直接导入csv模块更规范

# 目标文件夹路径
path = "/Users/dominik/nltk_data/corpora/my_corpus"
file_list = []

# 遍历文件夹收集所有TXT文件
for root, dirs, files in os.walk(path):
    for file_name in files:
        if file_name.endswith('.txt'):
            file_list.append(file_name)

print("收集到的TXT文件:", file_list)

# 切换到目标目录
os.chdir(path)

# 写入CSV:先写表头,再循环写入每个文件的文件名和文本
with open('test.csv', 'w', newline='', encoding='utf-8') as output:
    writer_obj = csv.writer(output)
    # 写入表头
    writer_obj.writerow(["文件名", "文本内容"])
    # 循环处理每个TXT文件
    for file_name in file_list:
        with open(file_name, 'r', encoding='utf-8') as input_file:
            txt_content = input_file.read()
            # 把文件名和文本打包成列表,作为一行写入
            writer_obj.writerow([file_name, txt_content])

print("文件写入完成!")

代码说明

  1. 收集文件:把file_list初始化移到os.walk外面,确保能收集到所有子目录下的TXT文件。
  2. 写入逻辑:
    • writerow([file_name, txt_content])会把文件名放到第一列,完整文本放到第二列,彻底解决字符拆分的问题。
    • newline=''是为了避免Windows系统下CSV出现空行。
    • 指定encoding='utf-8'保证中文等特殊字符能正常写入。
  3. 效率提升:只打开一次CSV文件,循环写入所有内容,比每次打开关闭更省资源。

修改后输出的CSV就完全符合你的预期:第一列是文件名,第二列是完整的文本内容,不会再出现字符拆分的情况。

内容的提问来源于stack exchange,提问作者Dominik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 02:55:05