相关疑难解决方法(0)

使用 CSV 模块解析 CSV 字符串

我从外部源获取 CSV 格式的数据,并且数据不应写入文件,否则会导致许多我想避免的不同维护任务。我正在以字符串形式获取数据。

所以现在我想将数据解释为 CSV。python 模块csv适合于此,所以我正在使用它。

csv.reader但是,使用(或)构建 CSV 解析器dictreader需要数据支持迭代器。列表或读者已经可以做到这一点。但是,我的数据在引号字符串内包含换行符 ( \n)(这对于 CSV 格式来说完全没问题),并且还包含换行符作为记录结束指示符/行终止符。

如果我这样构建它:

csvreader = csv.reader(data.split('\n'))
Run Code Online (Sandbox Code Playgroud)

那么我已经通过将换行符解释为记录结束指示符来破坏有效的 CSV 格式,即使它们位于带引号的字符串内。对我来说,换行符的解释应该由 CSV 解析器完成,因为它知道包含 CSV 相关格式字符(如换行符)的引号字段。

我对包解析器的工作方式有误解吗csv?或者,当数据包含不指示记录结尾的换行符时,如何使用 CSV 解析器解析 CSV 类型字符串?

编辑1:为我的问题添加上下文可能并不明智,因为上下文似乎已经超越了我的实际问题/问题。澄清一下,我的问题不是内存中解析 CSV。我StringIO已经找到了。使用时StringIO,所做的就是使用整个字符串/文件作为第一条记录。

编辑 2:也许示例数据会有所帮助。我的数据如下所示:

"value1";"value2";"value3
stillvalue3"
"value4";"value5";"value6"
Run Code Online (Sandbox Code Playgroud)

因此,在第一个记录的第三个条目中,我有一个换行符,它应该被解释为第一个记录中的第三个条目的一部分。

编辑3:我目前使用解析器的方式是这样的:

csvreader = csv.reader(StringIO(result), quotechar='"', delimiter=';', lineterminator='\n', escapechar='"')
Run Code Online (Sandbox Code Playgroud)

因为规范规定字段内的双引号 (") 由引号字符 ("") 转义,所以数据可能如下所示:

"value1";"value2";"value3
stillvalue3
a ""quote"" inside the quote"
"value4";"value5";"value6"
Run Code Online (Sandbox Code Playgroud)

似乎使用这些设置,StringIO 输入总是会生成一条记录,其中包含字符串中的所有数据。删除

escapechar='"'
Run Code Online (Sandbox Code Playgroud)

解决了这个问题,但是,我不支持引号内转义的双引号字符。所以我的问题的性质改变了。如果有人有想法,我会保持开放状态,并稍后接受马丁·埃文斯的回答。

python csv python-3.x

4
推荐指数
1
解决办法
1672
查看次数

Python新文件混淆CSV文件

我有以下Python代码.它读取csv文件并将第一列输出到新的csv文件.

但问题是在我的csv文件中除了用于创建新行的新行之外还有\n.但它们包含在双引号内.

比如这样:

A, B, C,
D, "12
34", E,
F, G, H
Run Code Online (Sandbox Code Playgroud)

所以我想我需要在某处添加quotechar ='"',但我无法弄明白.

f_in = open('source.csv')

fields = []

for line in f_in.readlines():
    fields.append([item.strip('\n') for item in line.split(',')])
f_in.close()

f_out = open('sourceNew.csv', 'w')

for i in range(len(fields)):
    if fields[i][0] != '':
        f_out.write(fields[i][0] + ',,\n')


f_out.close()
Run Code Online (Sandbox Code Playgroud)

我如何区分真正的新行\n和\n包含在双引号中.

谢谢

python csv

3
推荐指数
1
解决办法
7168
查看次数

标签 统计

csv ×2

python ×2

python-3.x ×1