我有一个包含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选择所有名称字段?
答案 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)个元素。
如果我们知道
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