单个 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
我有一个包含 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