Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中,如何让csv.DictReader正确处理包含换行符的字符串?_Python_Csv_Export To Csv - Fatal编程技术网

在python中,如何让csv.DictReader正确处理包含换行符的字符串?

在python中,如何让csv.DictReader正确处理包含换行符的字符串?,python,csv,export-to-csv,Python,Csv,Export To Csv,我有一些csv文件,其中包含带有换行符的字符串。这些文件在Excel中可以很好地打开,但当我尝试使用csv.DictReader()读入文件时,csv.DictReader()似乎会将字符串中的每一行都作为一行新数据处理,而不是忽略字符串中的回车符 我该怎么做才能让下面的第二次考试像第一次考试一样通过 #csv contents this, is, a, test 1,2,u'thr\nee',4 5,6,7,8 result = [] text = """t

我有一些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)

假设您的csv内容被正确引用,在实例化读卡器时指定适当的quotechar应该执行以下操作:


否则,我假设您的内容中有unix换行符('\n'),而dos换行符('\r\n')作为行终止符。从Python2.6.7开始,该文档提到,读者通过硬编码将两者识别为行术语编辑器,无论您指定什么,都不知道您的Python版本是否如此。如果是,您必须手动预处理(可能是后处理)您的文件,以确保正确引用或用其他内容替换单个'\n',然后在csv解析后执行相反操作。

还有一个事实,即csv文件应以二进制模式打开。我记得最近在使用
csv
模块时遇到了问题。