单个 CSV 列包含逗号 - Python

A single CSV column includes commas - Python

我有一个包含 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 选择所有名称字段?

因为您的源 CSV 文件格式不正确,当 CSV reader 拆分多行时,您将得到不同数量的元素。例如,

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" 和 "score"

然后我们可以 "glue" 从列表中的中间元素返回第二列,即

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

这可以通过 列表理解 而不是 range(1, len(row) - 1) ...

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

... 然后我们可以将其传递给 ', '.join() 到 "glue" 各个元素返回到字符串

', '.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