0

我正在寻找一种聪明的方法来检查文件的第一行,然后再将其作为 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)
# ...
4

2 回答 2

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))
于 2013-03-14T22:03:49.503 回答
0

第一行会是这样吗?

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

如果没有,您可以只阅读第一行,查找逗号,如果没有找到逗号,请尝试解释编码,否则将其(以及其他每一行)传递给csv.reader()?

于 2013-03-14T22:05:43.230 回答