繁体   English   中英

使用python读取csv文件时区分“”和空值

[英]Distinguish between “” and empty value when reading csv file using python

CSV文件包含诸如“”,“ ab,abc”,“ abc”之类的值。 注意,我指的是空值,如未知值。 这与“”不同,后者尚未设置值。 我对这两个值的处理不同。 我需要一种方法来读取“”和空值,并区分两者。 我正在将数据映射到数字,以使“”映射到0,而将映射到NaN。 请注意,我没有解析问题,可以使用逗号作为分隔符来解析“ ab,abc”之类的字段。 问题是python读取“”和空值,如空字符串(例如“”)。 并且这两个值不相同,因此不应分组为空字符串。

不仅如此,我还需要编写csv文件,以使“”被写为“”而不是,而NaN应该被写为“(空值)”。

我研究了csv方言,例如doublequote,escapechar,quotechar,quoting。 这不是我想要的。 这些都是在数据中出现定界符(即“ ab,abc”)的所有情况,正如我提到的,使用特殊字符进行解析不是问题。

我不想用熊猫。 我唯一能想到的就是正则表达式? 但是,如果要处理数百万条线,那将是一项开销。

我想要的行为是这样的:

a = "\"\"" (or it could be a="" or a="ab,abc")
if (a=="\"\""):
    map[0]=0
elif(a==""):
    map[0]=np.nan
else:
    map[0] = a

我的csv阅读器如下:

import csv
f = open(filepath, 'r')
csvreader = csv.reader(f)
for row in csvreader:
        print(row)

我在读取csv文件时需要上述行为。 当前仅读取两个值:''(空字符串)或'ab,abc'。

我想读取3个不同的值。 ''空字符串,'“”'带双引号的字符串,以及实际字符串'ab,abc'

查看CPython源代码中csv模块 (搜索IN_QUOTED_FIELD ),它没有任何内部状态可以让您执行此操作。 例如,解析:

"a"b"c"d

解析为: 'ab"c"d' ,可能不是您所期望的。 例如:

import csv
from io import StringIO

[row] = csv.reader(StringIO(
    '"a"b"c"d'))

print(row)

具体来说,引号仅在字段的开头专门处理,并且所有字符都会在遇到它们时才添加到字段中,而不是任何允许在“取消引用”字段时触发任何特殊行为的字符

我想出的解决方案是这样的:

如果我更改输入文件,以使引用的字符串具有转义符'\\',则输入文件如下:

col1,col2,col3
"",a,b
\cde \,f,g
,h,i
\j,kl\,mno,p

然后双引号的空字段和未引号的空字段是可分离的

csvreader = csv.reader(f, quotechar='\\')
    for row in csvreader:
        print(row)

到目前为止,这是我最好的解决方案...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM