Python csv writer不会添加我的专栏

时间:2018-01-07 04:51:21

标签: python csv

我正在尝试从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']) 

1 个答案:

答案 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的值,而不是whip2append()只会因line.append(whip2)而失败。

AttributeError: 'dict' object has no attribute 'append'

然后line['Whip'] = whip2 将获得完整的词典,包括您的附加列,csv_writer.writerow(line)来电将立即全部写出来。