作家.csv是为一个键写入值,而不是为所有其他键写入值

2024-10-03 15:28:56 发布

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

我有一个csv文件,里面有几行密钥对。在

让我们调用key、'key'和不同的值'a''b''c'等。。在

我尝试使用csv.writer,这样它只在值为'b'时才将行写入文件。在

到目前为止,我有以下代码:

csvfileR = []

with open('csvfileR.csv', 'r') as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        csvfileR.append(row)

w = open('csvfileW.csv','w')
fieldnames = ['key']
writer = csv.writer(w)
writer.writerow(fieldnames)

for i in range(len(csvfileR)):
    if csvfileR[i]['key'] == 'b':
        print (csvfileR[i]['key'])
        fields = [csvfileR[i]['key']]
        writer.writerow(fields)

问题是,writer在过滤值'a'if csvfileR[i]['key'] == 'a')时写入正确,但在过滤任何其他值(if csvfileR[i]['key'] == 'b'(或'c''d'等)时,会给出一个空的csv文件。在

print方法对所有值都能正常工作,因此Dict被正确附加。在

具体来说,csvfileR包含我的资产交易数据。我希望csv.writer为一系列不同资产中的一项资产创建一个交易数据csvfileW。在

一行csvfileR如下所示:

OrderedDict([('Date', '2016.09.12'), ('Name of Asset Traded', 'Facebook Stock'), ('Price purchased', '$100'), ('Price sold, '$150')

问题是,如果我过滤掉我的第一个资产‘Facebook Stock’,那么csv.writer会写,但是如果我过滤掉任何其他资产,csv.writer就不会写。在

所以

if csvfileR[i]['Name of Asset Traded'] == 'Facebook Stock'

将正确创建CSV文件,但是

if csvfileR[i]['Name of Asset Traded'] == 'Apple Stock'

或者

if csvfileR[i]['Name of Asset Traded'] == 'FedEx Stock'

将创建一个空白的CSV文件。在

但是

print (csvfileR[i]['Name of Asset Traded'])

每次遇到'Apple''FedEx'时都会打印出来。在


Tags: 文件ofcsvkeynamefacebookifstock
2条回答

刚刚弄明白了。很愚蠢的错误。代码末尾未包含w.close()。代码现在可以正常工作了。谢谢你的帮助。

如前所述,考虑使用一个单独的with来处理两个文件的读写,甚至可以避免使用csvfileR列表。在

with open('csvfileR.csv', 'r') as csvfile, open('csvfileW.csv', 'w') as outfile:
    fieldnames = ['key']
    writer = csv.writer(outfile)
    writer.writerow(fieldnames)

    reader = csv.DictReader(csvfile)

    for row in reader:
        if row['key'] == 'b':
            print (row['key'])
            fields = [row['key']]
            writer.writerow(fields)

然而,上面的代码看起来很奇怪,因为只有b才会在输出csv的第一列中输出。很可能,post并没有反映实际代码。根据需要调整以上。在

相关问题 更多 >