Python .seek不适用于重置包含字符串的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

我正在尝试重置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 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