Python CSV不会将数据写入文件

时间:2017-06-28 02:59:39

标签: python-3.x csv

我遇到了这个问题。我是使用python编写CSV文件的新手,并且已经阅读了很多关于该主题的不同帖子,但是现在我遇到了这个并且可以使用一些帮助。

import csv
#headers from the read.csv file that I wan't to parse and write to the new file.
headers = ['header1', 'header5', 'header6', 'header7']
#open the write.csv file to write the data to
with open("write.csv", 'wb') as csvWriter:
    writer = csv.writer(csvWriter)
#open the main data file that I want to parse data out of and write to write.csv
with open('reading.csv') as csvfile:
    readCSV = csv.reader(csvfile, delimiter=',' )
    csvList = list(readCSV)
    #finds where the position of the data I want to pull out and write to write.csv
    itemCode = csvList[0].index(headers[0])
    vendorName = csvList[0].index(headers[1])
    supplierID = csvList[0].index(headers[2])
    supplierItemCode = csvList[0].index(headers[3])
    for row in readCSV:
        writer.writerow([row[itemCode], row[vendorName], row[supplierID], row[supplierItemCode]])
    csvWriter.close()

--- --- UPDATE 我做了修改建议,并尝试评论代码的以下部分&将'wb'改为'w'并且该程序有效。但是,我不明白为什么,以及如何设置它以便我可以列出我想要提取的标题?

csvList = list(readCSV)
itemCode = csvList[0].index(headers[0])
vendorName = csvList[0].index(headers[1])
supplierID = csvList[0].index(headers[2])
supplierItemCode = csvList[0].index(headers[3])

这是我更新的代码:

 headers = ['header1', 'header5', 'header6', 'header7']
    #open the write.csv file to write the data to
    with open("write.csv", 'wb') as csvWriter, open('reading.csv') as csvfile:
        writer = csv.writer(csvWriter)
        readCSV = csv.reader(csvfile, delimiter=',' )
        """csvList = list(readCSV)
        #finds where the position of the data I want to pull out and write to write.csv
        itemCode = csvList[0].index(headers[0])
        vendorName = csvList[0].index(headers[1])
        supplierID = csvList[0].index(headers[2])
        supplierItemCode = csvList[0].index(headers[3])"""
        for row in readCSV:
            writer.writerow([row[0], row[27], row[28], row[29]])

3 个答案:

答案 0 :(得分:2)

如果你想在同一个块下访问两个编写器,你应该做这样的事情

with open("write.csv", 'wb') as csvWriter,open('reading.csv') as csvfile:
    writer = csv.writer(csvWriter)
    readCSV = csv.reader(csvfile, delimiter=',' )
    csvList = list(readCSV)
    #finds where the position of the data I want to pull out and write to write.csv
    itemCode = csvList[0].index(headers[0])
    vendorName = csvList[0].index(headers[1])
    supplierID = csvList[0].index(headers[2])
    supplierItemCode = csvList[0].index(headers[3])
    for row in readCSV:
        writer.writerow([row[itemCode], row[vendorName], row[supplierID], row[supplierItemCode]])
    csvWriter.close()

答案 1 :(得分:1)

看起来您想要将列的子集写入新文件。使用DictReader / DictWriter可以更轻松地解决此问题。请注意在使用Python 3.x时正确使用open。您的尝试使用的是Python 2.x方式。

import csv

# headers you want in the order you want
headers = ['header1','header5','header6','header7']

with open('write.csv','w',newline='') as csvWriter,open('read.csv',newline='') as csvfile:
    writer = csv.DictWriter(csvWriter,fieldnames=headers,extrasaction='ignore')
    readCSV = csv.DictReader(csvfile)
    writer.writeheader()
    for row in readCSV:
        writer.writerow(row)

测试数据:

header1,header2,header3,header4,header5,header6,header7
1,2,3,4,5,6,7
11,22,33,44,55,66,77

输出:

header1,header5,header6,header7
1,5,6,7
11,55,66,77

答案 2 :(得分:0)

一旦退出块,with open() as csvWriter:构造就会处理所提供文件的关闭。因此,一旦你到达writer.writerow,文件就已经关闭了。

您需要将整个表达式括在with open块中。

with open("write.csv", 'wb') as csvWriter:
    ....
    #Do all writing within this block
    ....