使用csv.writer写入字符串序列时行列输出异常如何解决
问题原因
你代码中的site_tree_info是单个字符串类型,而非存储所有待写入字符串的列表。当你对字符串执行for item in site_tree_info遍历时,每次取出的item是字符串中的单个字符,自然会出现写入结果不符合预期的情况。
此外你当前的提取逻辑中,每次处理一个PDF文件就会给site_tree_info重新赋值,之前PDF提取的内容会被直接覆盖,也会导致最终写入的数据不全。
修复步骤
- 先初始化一个全局列表存储所有提取到的信息,避免内容被覆盖
- 调整CSV写入逻辑,避免遍历单个字符串,同时添加
newline=''参数避免Windows系统下生成的CSV出现多余空行
完整修正代码
import os import re import csv import pdfplumber meta_sample = re.compile(r'^[A-Z].*') # 初始化列表存储所有提取结果 all_site_tree_info = [] # 提取PDF内容逻辑 for root, dirs, files in os.walk('/Users/myname/tree'): for filename in files: p = os.path.join(root, filename) with pdfplumber.open(p) as pdf: sample_info = pdf.pages[0] sample_info_text = sample_info.extract_text() sample_info_text_split = sample_info_text.split('\n') # 原有匹配逻辑保留不修改 for lines in sample_info_text_split: if meta_sample.match(lines): column_name, *column_info = lines.split(':') column_info = ' '.join(column_info) # 提取当前PDF的站点树信息,加入全局列表 site_tree_info = sample_info_text_split[2].strip().split(":", 1)[1].strip() all_site_tree_info.append(site_tree_info) # 统一写入CSV with open("output.csv", mode="w", newline='', encoding='utf-8-sig') as fp: wr = csv.writer(fp, dialect="excel") for item in all_site_tree_info: wr.writerow([item])
如果需要追加写入而非覆盖原有CSV,只需将写入部分的mode="w"修改为mode="a+"即可。
内容的提问来源于stack exchange,提问作者Todd D. Johnson
相关产品推荐
相关产品推荐

