Python解析CSV文件导出指定列至文本文件时输出格式异常问题求助
问题分析与解决方案
你遇到的问题根源在于对csv.writer.writerow()方法的使用误解:这个方法要求传入一个可迭代的序列(比如列表、元组),当你直接传入字符串row[2]时,Python会把字符串当成字符的迭代器——每个字符都会被当作一个独立的CSV字段,所以输出才会变成t,h,r,e,e这种逗号分隔的字符形式。
下面给你两种可行的修改方案,按需选择:
方案一:直接用普通文件写入(推荐,因为目标是纯文本)
既然你要输出的是纯文本文件而非CSV格式,完全可以跳过csv.writer,直接用文件对象的write()方法,记得手动添加换行符来保证每行一个内容:
#!/usr/bin/env python import csv inputFile = open('in.csv', 'r') inputReader = csv.reader(inputFile) outputFile = open('out.txt', 'w') for row in inputReader: text = row[2] # 获取第3列内容 outputFile.write(text + '\n') # 写入文本并换行 outputFile.close() inputFile.close()
进阶优化:用with语句自动管理文件
更推荐用with上下文管理器,它会在代码块结束后自动关闭文件,避免忘记close()导致的资源泄漏:
#!/usr/bin/env python import csv with open('in.csv', 'r') as inputFile, open('out.txt', 'w') as outputFile: inputReader = csv.reader(inputFile) for row in inputReader: text = row[2] outputFile.write(f"{text}\n")
方案二:保留csv.writer的写法
如果后续你可能需要输出CSV格式内容,只是现在要单个字段,只需要把字符串包装成一个列表(让writerow()识别这是单个字段):
#!/usr/bin/env python import csv inputFile = open('in.csv', 'r') inputReader = csv.reader(inputFile) outputFile = open('out.txt', 'w') outputWriter = csv.writer(outputFile) for row in inputReader: text = row[2] # 将第3列写入文件 outputWriter.writerow([text]) # 把字符串放进列表里 outputFile.close() inputFile.close()
这样修改后,输出就会和你的预期一致:
three six
内容的提问来源于stack exchange,提问作者mikey
相关产品推荐
相关产品推荐

