2

我有一些 csv 文件,其中包含带有换行符的字符串。这些文件将在 Excel 中正常打开,但是当我尝试使用 csv.DictReader() 读取文件时,csv.DictReader() 似乎将字符串中的每个换行符作为新的数据行处理,而不是忽略回车在字符串中中断。

我该怎么做才能让下面的第二个测试像第一个测试一样通过?

#csv contents
this, is, a, test
1,2,u'thr\nee',4
5,6,7,8 

        result = []
        text = """this, is, a, test
1,2,u'three',4
5,6,7,8"""
        b = StringIO(text)
        reader = csv.DictReader(b)
        for row in reader:
                result.append(row)

        self.assertEqual(2,len(result))
        expected = [{'this': '1', ' test': '4', ' is': '2', ' a': "u'three'"}, {'this': '5', ' test': '8', ' is': '6', ' a': '7'}]
        self.assertEqual(expected ,result)

        #With a /n inside the string.

        result = []
        text = """this, is, a, test
1,2,u'thr\nee',4
5,6,7,8"""
        b = StringIO(text)
        reader = csv.DictReader(b)
        for row in reader:
                result.append(row)

        self.assertEqual(2,len(result))
        #expected = [{'this': '1', ' test': '4', ' is': '2', ' a': "u'thr\nee'"}, {'this': '5', ' test': '8', ' is': '6', ' a': '7'}]
        #self.assertEqual(expected,result)
4

1 回答 1

3

假设您的 csv 内容被正确引用,在实例化读者时指定适当的 quotechar 应该这样做:

http://docs.python.org/release/2.6.7/library/csv.html#csv.Dialect.quotechar

否则,我假设您的内容中有 unix 换行符 ('\n') 和 dos 换行符 ('\r\n') 作为行终止符。从 Python 2.6.7 开始,文档提到,无论您指定什么,阅读器都被硬编码为将两者识别为行终止符,不知道您的 Python 版本是否属于这种情况。如果是,您将必须手动预处理(可能还有后处理)您的文件,以确保适当的引用或将单个 '\n' 替换为其他内容,然后在 csv 解析后执行相反的操作。

于 2012-06-01T13:56:02.963 回答