我有一个带有密钥对行的csv文件。

让我们调用键'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股票”,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'

最佳答案

如前所述,考虑使用单个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的第一列中输出。可能,发布不会反映实际的代码。根据需要在上方进行调整。

09-15 17:02