如何区分空字符串“”和空输入?

时间:2019-10-02 14:59:54

标签: python python-3.x csv

在Python 3中,我正在使用csv包

import csv

读取稀疏逗号分隔的CSV文件。其中的一些元素是空字符串

...,"",...

和一些为空的

...,,...

我想区分那些。那怎么办?

3 个答案:

答案 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)租住地方解决了问题。