单个CSV列包含逗号 - Python

时间:2015-11-27 11:50:04

标签: python csv comma

我有一个包含3列的CSV文件。但是,这3列中的一列包含破坏CSV格式的逗号。我的csv如下:

id,name,score
1,Black,1
2, Brown,J,0

我只想复制其他CSV文件中的第二列。我的代码如下所示:

for row in inpTweets:
            total_score = 0
            name = row [1]
writer.writerow([row [1], total_score])

是否有任何适当的方法来更改此格式,以便使用python选择所有名称字段?

1 个答案:

答案 0 :(得分:1)

由于您的源CSV文件格式不正确,因此当CSV阅读器分割各行时,您将获得不同数量的元素。例如,

import csv
with open(r'C:\Users\Gord\Desktop\broken.csv', 'rb') as csv_in:
    inpTweets = csv.reader(csv_in, skipinitialspace=True)
    header_row = True
    for row in inpTweets:
        if header_row:
            header_row = False
        else:
            print(row)

将打印

['1', 'Black', '1']
['2', 'Brown', 'J', '0']

请注意,第一个列表包含三(3)个元素,第二个列表包含四(4)个元素。

如果我们知道

  • 源文件应该只包含三列,
  • 第一列和最后一列是" id"和"得分"
然后我们可以"胶水"第二列从列表中的中间元素返回,即

row[1] + ', ' + row[2] + ... + row[n-1]

可以通过range(1, len(row) - 1)上的列表理解来完成...

[row[x] for x in range(1, len(row) - 1)]

...然后我们可以将', '.join()传递给"胶水"单个元素回到字符串

', '.join([row[x] for x in range(1, len(row) - 1)])

最终代码看起来像这样:

import csv
with open(r'C:\Users\Gord\Desktop\broken.csv', 'rb') as csv_in:
    inpTweets = csv.reader(csv_in, skipinitialspace=True)
    with open(r'C:\Users\Gord\Desktop\output.csv', 'wb') as csv_out:
        writer = csv.writer(csv_out, quoting=csv.QUOTE_NONNUMERIC)
        header_row = True
        for row in inpTweets:
            if header_row:
                header_row = False
            else:
                out_row = [', '.join([row[x] for x in range(1, len(row) - 1)]), 0]
                writer.writerow(out_row)

,结果输出CSV文件为

"Black",0
"Brown, J",0