Python csv writer不会添加我的列

2024-03-28 18:38:52 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Tags: 文件csvnewinputlineyearreaderfile
1条回答
网友
1楼 · 发布于 2024-03-28 18:38:52

这条线有问题吗

csv_writer.write(line['Whip']) 

一个csv.DictWriter对象没有write()方法。似乎您正试图用csv_writer.writerow(line)写出30列输入数据,然后以某种方式追加另一列。但这不是DictWriter的工作原理。它希望得到一个dict来描述您希望它输出的整个行,然后它将该dict转换为一个逗号分隔的行,并将其写入您的文件。一旦写了行,就不能再添加了。通过使用csv,您可以放弃对输出文件的直接控制。你知道吗

所以

第一步。通过将Whip放入fieldnames,将其指定为输出文件中的一列。你知道吗

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是一个dict,而不是list。使用字典表示法添加whip2的值,而不是append()line.append(whip2)只会因AttributeError: 'dict' object has no attribute 'append'而失败。你知道吗

line['Whip'] = whip2

然后csv_writer.writerow(line)将得到一个完整的dict,包括您的附加列,writerow()调用将立即写出所有内容。你知道吗

相关问题 更多 >