Python 使用反向转义字符分析csv

Python 使用反向转义字符分析csv,python,pandas,csv,Python,Pandas,Csv,我需要解析一个大的csv文件(例如,将其转换为df)。它是一个不带引号的CSV,以逗号作为分隔符。我以txt格式接收文件,并将扩展名更改为csv。我现在看到一些字段表示自由文本,其中有逗号。我在考虑使用一个heauristic,其中分隔符逗号后面永远不会有空格,而在大多数情况下,自由文本逗号后面会有空格 问题是使用escapechar='标记转义后面的字符,而我需要它转义前面的字符 有没有办法标记反向转义字符 我正在考虑用“#$#$#$#$#”替换所有“,”的替代方案,但该文件是3GB,而且效率

我需要解析一个大的csv文件(例如,将其转换为df)。它是一个不带引号的CSV,以逗号作为分隔符。我以txt格式接收文件,并将扩展名更改为csv。我现在看到一些字段表示自由文本,其中有逗号。我在考虑使用一个heauristic,其中分隔符逗号后面永远不会有空格,而在大多数情况下,自由文本逗号后面会有空格

问题是使用
escapechar='
标记转义后面的字符,而我需要它转义前面的字符

有没有办法标记反向转义字符

我正在考虑用“#$#$#$#$#”替换所有“,”的替代方案,但该文件是3GB,而且效率非常低

另一种选择是发回文件,抱怨文件格式不正确。问题是这会伤害我的自尊心


谢谢

您可以添加一个包装器,对提供给csv阅读器的每一行进行包装:

# foo.csv:
col1,col2,col3, with, commas,col4

# python file:
def escape_commas(filelike):
    for line in filelike:
        yield line.replace(', ', '\\, ')

with open('foo.csv', newline='') as csvfile:
    reader = csv.reader(escape_commas(csvfile), escapechar='\\')
    for row in reader:
        print('|'.join(row))

# result:
col1|col2|col3, with, commas|col4
编辑:对于熊猫,您可能希望为实现读取方法的文件制作包装器:

class EscapeCommas():
    def __init__(self, file):
        self.file = file
    def read(self, size=-1, /):
        text = self.file.read(size)
        return text.replace(', ', '\\, ')

with open('foo.csv', newline='') as csvfile:
    pd.read_csv(EscapeCommas(csvfile), escapechar='\\')

为什么不将“,”(逗号+空格)字符替换为“;”(分号)以便您可以将csv作为分隔符分号导入?无需替换文件中的所有内容;只需在每行上循环,替换需要替换的内容,然后从修改后的字符串导入。