我正在尝试使用python CSV阅读器解析“伪CSV”文件,并且对如何添加一些额外逻辑有一些疑问。我称之为“伪CSV”文件的原因是因为输入文件中 某些 的行在实际CSV数据之前会有文本(30-40个字符)开始。我想找出删除此文本的最佳方法。
目前,我找到了3个删除所述文字的选项:
从Python中调用grep和sed并将输出传递给临时文件,然后将其输入到csv阅读器 (呃,我想避免这个选择)
创建CSV方言以删除不需要的文字 (这个选项感觉不对)
扩展File对象,实现next()函数以根据需要删除不需要的文本。
我无法控制输入文件的生成方式,因此不能修改生成。
这是我在意识到输入文件出现问题时的相关代码。
with open('myFile', 'r') as csvfile:
theReader = csv.reader(csvfile)
for row in theReader:
# my logic here
如果我选择上面的选项3,解决方案非常简单,但是
然后我将无法合并with open()
语法。
所以,这是我的问题(实际上是2个):选项3是解决此问题的最佳方法
问题?如果是这样,我如何将其与with open()
语法合并?
编辑 :忘记提及我在Linux上使用Python 2.7。
答案 0 :(得分:4)
csv.reader
接受任意迭代:
with open('myFile', 'rb') as csvfile:
reader = csv.reader(filter_line(line) for line in csvfile)
for row in reader:
# my logic here
答案 1 :(得分:0)
您可以使用contextlib并创建自己的上下文管理器。
from contextlib import contextmanager
@contextmanager
def csv_factory(filename, mode="r"):
# setup here
fileobj = open(filename, mode)
reader = mycsv.reader(fileobj)
try:
yield reader # return value for usage in with
finally:
fileobj.close() # clean up here
with csv_factory("myFile") as csvfile:
for line in csvfile:
print(line)