Python csv 文本操作

Posted

技术标签:

【中文标题】Python csv 文本操作【英文标题】:Python csv text manipulation 【发布时间】:2012-02-22 05:34:44 【问题描述】:

我想将输入 .csv 文件中的组合字段组合起来以输出到 .csv 文件,其中一些包含逗号。这是我的简化代码

outfile = open('output.csv', 'w')

#these values are made up for this example; normally they would be read from
#a csv and passed to the following 'combine()' function

a = "John"  
b = ",Jr."  

def combine(a, b):  
    if a == "":  
        pass  #don't write anything if the field is empty
    else:  
        outfile.write(a)  
    if b =="":  
        pass  
    else:  
        outfile.write(b)  

如果 b 以逗号开头,如何输出“John, Jr.” ?我曾尝试使用 csv.writer writerow() 但它在每个字符之间放置了一个逗号分隔符。我尝试定义一个escapechar,但它只输出“John \”、“Jr”。有什么建议吗?

【问题讨论】:

【参考方案1】:

如果您想了解有关 CSV 的详细信息,请参阅规范:https://www.rfc-editor.org/rfc/rfc4180

一般来说,它说明了以下内容 “包含换行符 (CRLF)、双引号和逗号的字段应该用双引号括起来。”

“如果使用双引号将字段括起来,则出现在字段中的双引号必须通过在其前面加上另一个双引号来进行转义。”

Excel 等实现总是将所有字段值放在双引号中。

如果你打开一个文件进行读或写,你可以直接指定引用的类型

mcvs = csv.writer(open('file.csv', 'wb'), quoting=csv.QUOTE_ALL)

将始终在字段值周围添加引号。

对于所有可能的值,请查看 python 文档

http://docs.python.org/library/csv.html#module-csv

【讨论】:

我已经通过在整个“名称”输出字段周围手动双引号来解决它。我更喜欢这个,因为它使我的代码更具可读性。谢谢!【参考方案2】:

csv.writer 允许您使用add a quoting keyword 来控制引用的方式。

你可能想要csv.QUOTE_MINIMAL之类的东西。

>>> import csv
>>> with open('eggs.csv', 'wb') as outfile:
...     writer = csv.writer(outfile, quoting=csv.QUOTE_MINIMAL)
...     writer.writerow(['Spam'] * 5 + ['Baked Beans'])
...     writer.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])

【讨论】:

【参考方案3】:

csv.writer writerow() 需要一个值列表:

foo.writerow(['John', ',Jr.'])

【讨论】:

【参考方案4】:

如果你想坚持使用纯 Python:

resultStr = a+b
if ',' in resultStr: resultStr= '"' + resultStr + '"'

【讨论】:

这与我使用的解决方案非常相似。我将重写脚本以指定引用上面提到的所有内容。

以上是关于Python csv 文本操作的主要内容,如果未能解决你的问题,请参考以下文章

python读写csv文件

vb.net 怎么生成csv文件与怎么读取csv文件

21天学习python编程_csv文件操作

python读取文件操作文件放在哪里

如何在 python 中操作一个巨大的 CSV 文件

python教程之CSV文件数据存储的处理操作