簡體   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