按 CSV 中的列排序并写入 Python 中的新 CSV 文件

Sorting by column in a CSV and writing to a new CSV file in Python

我的代码:

import csv
import operator


first_csv_file = open('/Users/jawadmrahman/Downloads/account-cleanup-3 array/example.csv', 'r+')
csv_sort = csv.reader(first_csv_file, delimiter=',')
sort = sorted(csv_sort, key=operator.itemgetter(0))
sorted_csv_file = open('new_sorted2.csv', 'w+', newline='')
write = csv.writer(sorted_csv_file)
for eachline in sort:
    print (eachline)
    write.writerows(eachline)

我有一个示例 csv 文件:

我想按第一列排序并以这种方式获得结果: 1,9 2,17, 3,4 7,10 使用上面发布的代码,这就是我现在得到它的方式:

我该如何解决这个问题?

正如 JonSG 在对原始 post 的评论中指出的那样,您在一行 eachline.

上调用 writerows()(复数)

将最后一行更改为 write.writerow(eachline) 就可以了。

深入看问题

writerows() 需要“值列表的列表”。外部列表包含行,每行的内部列表实际上是单元格(该行的列):

sort = [
  ['1', '9'],
  ['2', '17'],
  ['3', '4'],
  ['7', '10'],
]

writer.writerows(sort)

将生成您期望的具有两列和四行的排序 CSV(并且您的打印语句显示)。

当您用单行调用 writerows() 时:

for eachline in sort:
    writer.writerows(eachline)

你得到一些非常奇怪的输出:

  • 它在包含多行的外部列表中解释 eachline,这意味着...

  • 它将 eachline 中的每个项目解释为具有单独列的行...

  • 并且 eachline 中的每个项目都是一个 Python 序列 ,字符串,因此 writerows() 遍历每个字符在您的字符串中,将每个字符视为其自己的列...

    ['1','9'] 被视为两个单列行,['1']['9']:

    1
    9
    

    ['2', '17']看成单列行['2']和双列行['1', '7']:

    2
    1,7