使用Python将CSV infile更改写入CSV outfile

2024-09-24 20:26:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了以下代码:

import sys, csv, operator
data = csv.reader(open('books.csv'),delimiter=',')
header = next(data)
print (header)
sortedlist = sorted(data, key=operator.itemgetter(1))
with open("books_sort.csv", "wb") as f:
#          fileWriter = csv.writer(f, delimiter=',')
           fileWriter = csv.writer(f)
#           fileWriter.writerows(header)
#           fileWriter.writerows(sortedlist)

           for row in sortedlist:
              print (row)
#             f.writerows(row)

此代码的目标是获取一个包含列中内容的文件,并仅基于第二列对该文件进行字母排序。然后将所需结果输出到一个新文件中。我上面的代码可以打印所需的结果,但是当我试图让它输出一个包含它的新文件时,它不起作用。您可以在上面的注释中看到我试图编写新文件的部分。你们有什么办法吗?在你们说更简单的方法是使用熊猫之前,我是特别不允许这样做的。以下是我的文件内容:

Title,            Author,        Publisher,  Year,  ISBN-10,   ISBN-13
Automate the...,  Al Sweigart,   No Sta...,  2015,  15932...,  978-15932...
Dive into Py...,  Mark Pilgr..., Apress,     2009,  14302...,  978-14302...
"Python Cook...,  "David Bea..., O'Reil...,  2013,  14493...,  978-14493...
Think Python...,  Allen B. D..., O'Reil...,  2015,  14919...,  978-14919...
"Fluent Pyth...,  Luciano Ra..., O'Reil...,  2015,  14919...,  978-14919...

Tags: 文件csv代码dataopenbooksoperatorrow
1条回答
网友
1楼 · 发布于 2024-09-24 20:26:45

看来你让这件事变得不必要了。首先,让我们清理示例数据,因为不匹配的双引号混淆了cvs.reader

Title,Author,Publisher,Year,ISBN-10,ISBN-13
Automate the...,Al Sweigart,No Sta...,2015,15932...,978-15932...
Dive into Py...,Mark Pilgr...,Apress,2009,14302...,978-14302...
"Python Coo...",David Beaz...,O'Reil...,2013,14493...,978-14493...
Think Python...,Allen B. D...,O'Reil...,2015,14919..., 978-14919...
"Fluent Pyt...",Luciano Ra...,O'Reil...,2015,14919...,978-14919...

接下来,让我们根据cvs模块文档建立一个程序:

import csv
import operator

data = csv.reader(open('books.csv', newline=''), delimiter=',')

header = next(data)

sortedlist = sorted(data, key=operator.itemgetter(1))

with open("books_sorted.csv", "w", newline='') as csvfile:
    cvsWriter = csv.writer(csvfile, delimiter=',')

    cvsWriter.writerow(header)

    cvsWriter.writerows(sortedlist)

它生成一个包含以下内容的输出文件:

Title,Author,Publisher,Year,ISBN-10,ISBN-13
Automate the...,Al Sweigart,No Sta...,2015,15932...,978-15932...
Think Python...,Allen B. D...,O'Reil...,2015,14919..., 978-14919...
Python Coo...,David Beaz...,O'Reil...,2013,14493...,978-14493...
Fluent Pyt...,Luciano Ra...,O'Reil...,2015,14919...,978-14919...
Dive into Py...,Mark Pilgr...,Apress,2009,14302...,978-14302...

缺少双引号,但希望是正确的。在注释掉的代码中,您在一行上调用了writerows()

#fileWriter.writerows(header)

for row in sortedlist:
              print (row)
#             f.writerows(row)

这是我们不应该指望的。这里您将使用writerow()。你知道吗

相关问题 更多 >