我正在尝试从csv文件中获取数据进行计算并将其添加回原始文件但我不知道为什么我的python代码不会打印出我的' whip'计算。以下是我正在使用的内容:
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'])
答案 0 :(得分:2)
这一行的问题
class Sender{
public int val=0;
public void show(){
System.out.println("Sender value="+val);
val++;
}
}
class Receiver{
public void show(Sender s){
System.out.println("Receiver value="+s.val);
}
}
class Main{
public static void main(String args[]){
Sender sender=new Sender();
Receiver receiver=new Receiver();
sender.show(sender);
receiver.show();
}
}
是csv_writer.write(line['Whip'])
对象没有csv.DictWriter
方法。您似乎试图用write()
写出30列输入数据,然后以某种方式追加另一列。但这不是csv_writer.writerow(line)
的工作方式。它希望得到一个描述你希望它输出的整个行的字典,然后它将该字典转换为它写入文件的逗号分隔行。写入行后,您无法添加该行。使用DictWriter
,您可以放弃对输出文件的直接控制。
所以,
步骤1.将csv
指定为输出文件中的一列,方法是将其放在Whip
中。
fieldnames
(你在随后注释掉的代码中有类似的东西。那时你正走在正确的轨道上。)
步骤2.请记住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', 'Whip']
是一个字典,而不是列表。使用字典表示法添加line
的值,而不是whip2
。 append()
只会因line.append(whip2)
而失败。
AttributeError: 'dict' object has no attribute 'append'
然后line['Whip'] = whip2
将获得完整的词典,包括您的附加列,csv_writer.writerow(line)
来电将立即全部写出来。