在Python 3中,我正在使用csv包
import csv
读取稀疏逗号分隔的CSV文件。其中的一些元素是空字符串
...,"",...
和一些为空的
...,,...
我想区分那些。那怎么办?
答案 0 :(得分:1)
如果您在解析前用一个安全的占位符(一个与csv文件中现有字符串不匹配的占位符)替换为一对裸双引号(“”),则可以在解析后将其替换回去,并标识具有一次出现的占位符:
import csv
lines = [
'"row1_col1","row1_col2 with ""embedded"" quotes",3,"",,"row1_col6"',
'"row2_col1","row2_col2",3,"",,"row2_col6"',
]
lines = [line.replace('""', '__PAIR_OF_DOUBLE_QUOTES__') for line in lines]
csv_reader = csv.reader(lines, delimiter=',')
rows = []
for row in csv_reader:
for col in range(len(row)):
# empty string is null/none
if row[col] == '':
row[col] = None
# string with just a pair of double quotes is the empty string
elif row[col] == '__PAIR_OF_DOUBLE_QUOTES__':
row[col] = ''
else:
row[col] = row[col].replace('__PAIR_OF_DOUBLE_QUOTES__', '"')
rows.append(row)
这将产生以下输出:
>>> print(json.dumps(rows))
[
["row1_col1", "row1_col2 with \"embedded\" quotes", "3", "", null, "row1_col6"],
["row2_col1", "row2_col2", "3", "", null, "row2_col6"]
]
答案 1 :(得分:0)
This answer建议使用csv模块是不可能的。但是,pandas read_csv()有许多参数,可让您区分NULL和“”。
答案 2 :(得分:0)
我收集到csv模块根本不可能做到这一点,因此我将继续预处理CSV文件以为“”插入一个虚拟值(我肯定爱我一些Emacs),然后用Python,检测伪值并将其作为空字符串处理,并将空值作为null处理。通过在克拉奇市(Kludge City)租住地方解决了问题。