Python .seek不适用于重置包含字符串的csv.reader,可以使用其他方法吗?
我正在尝试重置csv.reader,但由于存在字符串,其他人发布的解决方案当然不起作用…可以使用什么其他方法代替csv_reader.seek(0)重置csv.reader?我是新来的,所以我非常感谢任何见解 我还尝试将该列转换为一个列表,这会导致其他错误Python .seek不适用于重置包含字符串的csv.reader,可以使用其他方法吗?,python,csv,Python,Csv,我正在尝试重置csv.reader,但由于存在字符串,其他人发布的解决方案当然不起作用…可以使用什么其他方法代替csv_reader.seek(0)重置csv.reader?我是新来的,所以我非常感谢任何见解 我还尝试将该列转换为一个列表,这会导致其他错误 import os import csv csv_path=os.path.join("..","Resources","budget_data_1.csv") with open(csv_path,newline="") as csvfi
import os
import csv
csv_path=os.path.join("..","Resources","budget_data_1.csv")
with open(csv_path,newline="") as csvfile:
csv_reader=csv.reader(csvfile,delimiter=",")
next(csv_reader)
count=0
for i in csv_reader:
count+=1
print(count)
csv_reader.seek(0)
total=0
for row in csv_reader:
total+=int(row[1])
print(total)
您不能在
csv.reader
对象中seek
,但您可以在底层句柄上进行查找并再次跳过标题行…:
csvfile.seek(0)
next(csv_reader) # skip title line ... again
请注意,由于您正在阅读2次,最好的方法是将行存储在列表中:
csv_reader = list(csv_reader)
现在,您的代码变得(理解传递到sum
,使其更具pythonic):
如果您只需要第2列来计算平均值,请不要完全存储文件,只存储第2列中的数据:
next(csv_reader) # skip title line
col2 = [int(row[1]) for row in csv_reader] # create the list of integers
mean = sum(col2)/len(col2) # division may differ depending on python version
next(csv_reader) # skip title line
col2 = [int(row[1]) for row in csv_reader] # create the list of integers
mean = sum(col2)/len(col2) # division may differ depending on python version