在读取CSV之前检查文件第一行的简洁方法

时间:2013-03-14 21:51:54

标签: python csv io

我正在寻找一种聪明的方法来检查文件的第一行,然后再将其作为csv文件读取。我想检查是否有# coding: xxx行,以便我可以相应地解码读取数据。但是如果没有这样的行,则第一行可能已包含数据集。寻求对我来说似乎是如此残酷,我希望有一个巧妙的方法去做。

import re
import csv
fl = open(filename)
line = fl.readline()
coding = re.match('^#\s*coding\s*(:|=|:=)\s*([\w\d\-_]+)\s*$', line)
fl.seek(0)

reader = csv.reader(fl)
# ...

2 个答案:

答案 0 :(得分:3)

我认为您当前的方法没有任何问题,但是您可以选择以下方法:

import re
import csv
import itertools

line = next(f1)
coding = re.match('^#\s*coding\s*(:|=|:=)\s*([\w\d\-_]+)\s*$', line)
reader = csv.reader(itertools.chain([line], f1))

您的问题或您发布的代码并不清楚,但如果您的正则表达式匹配,如果您不想包含第一行,则可以执行以下操作:

reader = csv.reader(f1 if coding else itertools.chain([line], f1))

答案 1 :(得分:0)

第一行是否会像这样?

# coding: xxx, some other "field", and maybe another field

如果没有,你可以只读第一行,找一个逗号,如果没有找到逗号,试着解释一个编码,否则把它(和其他所有行)传递给csv.reader()