【发布时间】:2014-07-29 20:03:01
【问题描述】:
我正在使用 Python 的 CSV 模块,特别是编写器。我的问题是如何将双引号添加到列表中的单个项目并让作者以与打印语句相同的方式编写字符串?
例如:
import csv
#test "data"
test = ['item1','01','001',1]
csvOut = csv.writer(open('file.txt','a')) #'a' used for keeping past results
test[1] = '"'+test[1]+'"'
print test
#prints: ['item1', '"01"', '001', 1]
csvOut.writerow(test)
#written in the output file: item1,"""01""",001,1
#I was expecting: item1,"01",001,1
del csvOut
我厌倦了添加 quoting=csv.QUOTE_NONE 选项,但这引发了错误。我猜这与许多 csv 方言有关,我希望避免深入研究。
回想起来,我可能已经更聪明地构建了我的初始数据集,并且可能避免了这种情况的需要,但在这一点上,好奇心真的让我变得更好(这是一个简化的例子):你如何保持书面输出从添加那些额外的引号?
【问题讨论】:
-
以这种方式编写输出是生成有效 CSV 的一部分,该 CSV 以您指定的方式表示您的数据。生成一个无效的 CSV 文件(或者当您传入引号作为数据时写入引号作为语法的文件)将是一个错误,而不是一项功能。
-
您想要它是什么样子的?您还想与哪些其他 CSV 处理代码进行互操作? (如果您正在创建要输入 Excel 或
np.loadtxt或其他任何内容的文件,您的输出最好能被其他程序读取。) -
现有答案涵盖了它,但要完全清楚,值得注意的是,如果您使用
csv.reader重新读取输出,您将获得带引号的原始字符串。试试看。 -
@JasonS:好点;我可能不需要打开 Excel 或
np.loadtxt;您想要与之互操作的最常见的东西是您自己的代码。 :) -
我试图让它与其他软件互操作,但不想弄脏水。我也试图了解发生了什么(但想问一个具体的可回答的问题)。万一其他人偶然发现这一点,如果您对与其他程序更好的互操作性感兴趣,请谷歌搜索“schema.ini”和“csvt 文件扩展名”(解决了我的最终问题,但下面的答案仍然有帮助)