我有一个带有密钥对行的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的第一列中输出。可能,发布不会反映实际的代码。根据需要在上方进行调整。