使用不同的行终止符在Python中读取csv文件

时间:2009-11-20 14:51:41

标签: python csv delimiter

我有一个CSV格式的文件,其中分隔符是ASCII单位分隔符^_,行终止符是ASCII记录分隔符^^(显然,因为这些是非打印字符,我只是使用其中一种标准方式在这里写它们)。我写了大量读写CSV文件的代码,所以我的问题不在于Python的csv模块本身。问题是csv模块不支持读取(但它确实支持写入)除了回车符或换行符之外的行终止符,至少从我测试它的Python 2.6开始。文档说这是因为它是硬编码的,我认为它是在C代码中完成的,因为我没有在csv.py文件中看到任何可以更改的内容。

有没有人知道解决此限制的方法(补丁,其他CSV模块等)?我真的需要在一个文件中读取,我不能使用回车符或新行作为行终止符,因为这些字符将出现在某些字段中,我想尽可能避免编写自己的自定义阅读器代码,即使这样可以很容易地满足我的需求。

1 个答案:

答案 0 :(得分:3)

为什么不为csv.reader函数提供自定义迭代?这是一个简单的实现,它将CSV文件的全部内容一次性读入内存(根据文件的大小,可能需要也可能不需要):

def records(path):
    with open(path) as f:
        contents = f.read()
        return (record for record in contents.split('^^'))

csv.reader(records('input.csv'))

我认为这应该有用。