打开的文件包含数据,但在python中报告长度为0

打开的文件包含数据,但在python中报告长度为0,python,csv,Python,Csv,我肯定错过了一些很简单的东西,但我已经有一段时间把头撞在墙上了,不知道哪里出了错。我正在尝试打开一个csv文件并读取数据。我正在检测分隔符,然后用以下代码读入数据: with open(filepath, 'r') as csvfile: dialect = csv.Sniffer().sniff(csvfile.read()) delimiter = repr(dialect.delimiter)[1:-1] csvdata = [line.split(delimite

我肯定错过了一些很简单的东西,但我已经有一段时间把头撞在墙上了,不知道哪里出了错。我正在尝试打开一个csv文件并读取数据。我正在检测分隔符,然后用以下代码读入数据:

with open(filepath, 'r') as csvfile:
    dialect = csv.Sniffer().sniff(csvfile.read())
    delimiter = repr(dialect.delimiter)[1:-1]
    csvdata = [line.split(delimiter) for line in csvfile.readlines()]
但是,我的csvfile被认为没有长度。如果我跑步:

print(sum(1 for line in csvfile))
print(sum(1 for line in open(filepath, 'r')))
结果是零。如果我跑步:

print(sum(1 for line in csvfile))
print(sum(1 for line in open(filepath, 'r')))

然后我得到了五行,正如预期的那样。我通过将csvfile更改为其他随机名称来检查名称冲突,但这不会更改结果。我是否遗漏了某个步骤?

嗅探文件后,需要将文件指针移回文件的开头。这样做不需要读入整个文件,只需包含几行即可:

import csv

with open(filepath, 'r') as f_input:
    dialect = csv.Sniffer().sniff(f_input.read(2048))
    f_input.seek(0)
    csv_input = csv.reader(f_input, dialect)
    csv_data = list(csv_input)

另外,
csv.reader()
将为您进行拆分

你把文件用完了。它只适用于一次传递。另外,不要使用嗅探器返回的方言对象的delimeter的
repr
。。。这已经是你想要的了