打开的文件包含数据,但在python中报告长度为0
我肯定错过了一些很简单的东西,但我已经有一段时间把头撞在墙上了,不知道哪里出了错。我正在尝试打开一个csv文件并读取数据。我正在检测分隔符,然后用以下代码读入数据:打开的文件包含数据,但在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
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
。。。这已经是你想要的了