3

我想组合输入 .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." 建议?

4

4 回答 4

4

如果您想了解有关 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

于 2012-02-22T05:49:30.467 回答
1

csv.writer允许您添加quoting可用于控制引用方式的关键字。

您可能想要类似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'])
于 2012-02-22T05:51:56.577 回答
0

如果你想坚持使用纯 Python:

resultStr = a+b
if ',' in resultStr: resultStr= '"' + resultStr + '"'
于 2012-02-22T05:42:25.917 回答
0

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

foo.writerow(['John', ',Jr.'])
于 2012-02-22T05:38:37.517 回答