我正试图从csv文件中提取数据进行计算并将其添加回原始文件,但我不知道为什么python代码不会将我的“鞭子”计算打印出来。以下是我的工作内容:
import csv
print('enter Start year ')
startYear = input('start year: ')
print('enter End year ')
endYear = input('end year: ')
with open('Pitching.csv', 'rb') as csv_file:
csv_reader = csv.DictReader(csv_file)
with open('new_stats.csv', 'w') as new_file:
#headers = csv_reader.next()
#headers.append("Whip")
fieldnames = ['playerID', 'yearID', 'stint', 'teamID', 'lgID', 'W', 'L', 'G', 'GS', 'CG', 'SHO', 'SV', 'IPouts', 'H', 'ER', 'HR', 'BB', 'SO', 'BAOpp', 'ERA', 'IBB', 'WP', 'HBP', 'BK', 'BFP', 'GF', 'R', 'SH', 'SF', 'GIDP']
csv_writer = csv.DictWriter(new_file, fieldnames=fieldnames)
csv_writer.writeheader()
for line in csv_reader:
currentYear = line['yearID']
if int(currentYear) >= int(startYear) and int(currentYear) <= int(endYear):
walks = line['BB']
hits = line['H']
inningsPitched = line['Ipouts']
innings = inningsPitched/3.0
add = walks + hits
whip = add / innings
whip2 = whip
line.append(whip2)
csv_writer.writerow(line)
#csv_writer.write(line['Whip'])
这条线有问题吗
一个
csv.DictWriter
对象没有write()
方法。似乎您正试图用csv_writer.writerow(line)
写出30列输入数据,然后以某种方式追加另一列。但这不是DictWriter
的工作原理。它希望得到一个dict来描述您希望它输出的整个行,然后它将该dict转换为一个逗号分隔的行,并将其写入您的文件。一旦写了行,就不能再添加了。通过使用csv
,您可以放弃对输出文件的直接控制。你知道吗所以
第一步。通过将
Whip
放入fieldnames
,将其指定为输出文件中的一列。你知道吗(您在随后注释掉的代码中有类似的内容。当时你的思路是对的。)
第二步。记住
line
是一个dict,而不是list。使用字典表示法添加whip2
的值,而不是append()
。line.append(whip2)
只会因AttributeError: 'dict' object has no attribute 'append'
而失败。你知道吗然后
csv_writer.writerow(line)
将得到一个完整的dict,包括您的附加列,writerow()
调用将立即写出所有内容。你知道吗相关问题 更多 >
编程相关推荐