求助:将文件夹中RTF文件转为带文件名列的CSV(代码问题)
问题解决:RTF文本按行拆分存入CSV并添加文件名列
原代码存在以下核心问题:
- 函数
getFiles中第二个return FileNames永远无法执行,且遍历RTF文本的方式错误(遍历每个字符),导致重复添加整段文本 - 错误地将RTF文本内容传入
os.path.basename(),应该传入文件路径获取文件名 - 未按换行符拆分RTF文本,导致所有内容集中在一个单元格
- DataFrame创建语法错误,且两次调用
getFiles()导致重复数据
修正后的代码如下:
import pandas as pd import os from striprtf.striprtf import rtf_to_text dir_path = r'C:\Users\mairi\Desktop\testing txt to excel\\' new_path = r'C:\Users\mairi\Desktop\testing txt to excel\NEW\Data.csv' def process_rtf_files(): records = [] for filename in os.listdir(dir_path): file_path = os.path.join(dir_path, filename) # 仅处理文件,跳过子目录 if not os.path.isfile(file_path): continue # 读取并转换RTF为纯文本 with open(file_path, 'r', encoding='utf-8') as file: rtf_content = file.read() plain_text = rtf_to_text(rtf_content) # 按换行拆分文本,过滤空行 lines = [line.strip() for line in plain_text.split('\n') if line.strip()] # 为每行数据绑定对应文件名 for line in lines: records.append({'Filename': filename, 'Data': line}) return records # 生成数据并保存为CSV data_records = process_rtf_files() df = pd.DataFrame(data_records) df.to_csv(new_path, index=False, header=True)
关键修正说明:
- 用记录列表存储「文件名+对应行」的组合,确保每行数据对应一条独立记录
- 按
\n拆分转换后的纯文本,同时过滤空行避免无效数据 - 直接使用遍历到的
filename作为文件名列的值,修正原代码的文件名获取逻辑 - 修复DataFrame创建逻辑,确保列名与数据匹配
- 仅调用一次处理函数,避免重复获取数据
执行后将生成符合预期格式的CSV:
| Filename | Data |
|---|---|
| Filename_1 | Data line 1 |
| Filename_1 | Data line 2 |
| Filename_2 | Data line 1 |
| Filename_2 | Data line 2 |
| Filename_2 | Data line 3 |
内容的提问来源于stack exchange,提问作者MzNix
相关产品推荐
相关产品推荐

