Python CSV-将双双引号写入CSV文件吗?

时间:2019-02-08 02:02:45

标签: python csv

我正在尝试将一些数据写入csv文件。我只希望中间列在csv文件中有引号。我首先从数组中保存在数组中的数据开始。以下是一些打印出来的条目:

['1', '"For Those About To Rock We Salute You"', 'Album']
['2', '"Balls to the Wall"', 'Album']
['3', '"Restless and Wild"', 'Album']
['4', '"Let There Be Rock"', 'Album']
['5', '"Big Ones"', 'Album']
['6', '"Jagged Little Pill"', 'Album']
...

如您所见,只有中间一栏带有引号。但是,当我将其写入csv文件时,这就是我得到的:

1,""For Those About To Rock We Salute You"",Album
2,""Balls to the Wall"",Album
3,""Restless and Wild"",Album
4,""Let There Be Rock"",Album
5,""Big Ones"",Album
6,""Jagged Little Pill"",Album
...

除了中间那列,一切都很好!我有双双引号!

我有一个获取数据(保存在数组数组中)并将其写入csv文件的函数。我研究了QUOTE_NONE方法,但似乎不起作用...

file_data = ...
def write_node_csv():
    with open("./csv_files/albums.csv", mode='w') as csv_file:
        writer = csv.writer(csv_file, delimiter=',', quoting=csv.QUOTE_NONE, escapechar="\"")
        for data in file_data:
            writer.writerow(data)
    csv_file.close()

所以基本上我期望这样:

1,"For Those About To Rock We Salute You",Album
2,"Balls to the Wall",Album
3,"Restless and Wild",Album
4,"Let There Be Rock",Album
5,"Big Ones",Album
6,"Jagged Little Pill",Album
...

但是我得到了:

1,""For Those About To Rock We Salute You"",Album
2,""Balls to the Wall"",Album
3,""Restless and Wild"",Album
4,""Let There Be Rock"",Album
5,""Big Ones"",Album
6,""Jagged Little Pill"",Album
...

1 个答案:

答案 0 :(得分:1)

这是获得结果的演示:

In []:
data = """'1', '"For Those About To Rock We Salute You"', 'Album'
'2', '"Balls to the Wall"', 'Album'
'3', '"Restless and Wild"', 'Album'
'4', '"Let There Be Rock"', 'Album'
'5', '"Big Ones"', 'Album'
'6', '"Jagged Little Pill"', 'Album'"""

import csv
with StringIO(data) as fin:
    reader = csv.reader(fin, quotechar="'", skipinitialspace=True)
    for row in reader:
        print(row)

Out[]:
['1', '"For Those About To Rock We Salute You"', 'Album']
['2', '"Balls to the Wall"', 'Album']
['3', '"Restless and Wild"', 'Album']
['4', '"Let There Be Rock"', 'Album']
['5', '"Big Ones"', 'Album']
['6', '"Jagged Little Pill"', 'Album']

In []:
with StringIO(data) as fin, StringIO() as fout:
    reader = csv.reader(fin, quotechar="'", skipinitialspace=True)
    writer = csv.writer(fout, quotechar='', quoting=csv.QUOTE_NONE)
    writer.writerows(reader)
    contents = fout.getvalue()
print(contents)

Out[]:
1,"For Those About To Rock We Salute You",Album
2,"Balls to the Wall",Album
3,"Restless and Wild",Album
4,"Let There Be Rock",Album
5,"Big Ones",Album
6,"Jagged Little Pill",Album