用不同行结束符读取Python中的csv文件

4 投票
1 回答
4731 浏览
提问于 2025-04-15 16:12

我有一个CSV格式的文件,里面的分隔符是ASCII单位分隔符^_,而行结束符是ASCII记录分隔符^^(显然,因为这些是不可打印的字符,我在这里只是用了一种标准的方式来表示它们)。我写过很多读取和写入CSV文件的代码,所以我的问题并不是出在Python的csv模块上。问题在于,csv模块不支持读取除了回车符或换行符以外的行结束符(不过它支持写入),至少在我刚测试的Python 2.6版本中是这样的。文档中提到这是因为它是硬编码的,我理解为这是在模块底层的C代码中实现的,因为我在csv.py文件中没有看到可以更改的内容。

有没有人知道有什么办法可以绕过这个限制(比如补丁、其他CSV模块等等)?我真的需要读取一个文件,而这个文件不能使用回车符或换行符作为行结束符,因为这些字符会出现在某些字段中。我希望尽量避免自己写一个自定义的读取代码,尽管那样做其实很简单,可以满足我的需求。

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

我觉得这样应该可以。

撰写回答