4

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

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

4

1 回答 1

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'))

我认为这应该有效。

于 2009-11-20T14:58:59.047 回答