用'0'替换列表中的''值

时间:2016-07-26 18:29:49

标签: python string csv null

我有一些.csv个文件,其中包含NULL个值,在表格中显示为空。例如:

ID   Volts   Current   Watts
0    383               0
1    383     1         383
2    382     2         764

.csv文件输入到我的程序中并转换为如下列表:

with open(inputPath + file) as inFile:
    csvFile = csv.reader(inFile)
    for row in csvFile:
        removeNull(row)
        print(row)

基本上取csvFile中的每一行并将其转换为类似于以下内容的值列表:

['0', '383', '', '0']['1', '383', '1', '383]

请注意,NULL值现在只是空字符串,''

然后关于上面removeNull()程序的snipet被定义为:

def removeNull(row):
    nullIndex = row.index('')
    row.remove('')
    newRow = row.insert(nullIndex, '0')
    return newRow

通过列表(aka行)查找空字符串'',并将其索引记为nullIndex。然后删除所述索引处的空字符串,将其替换为'0'并返回已编辑的列表。

问题:我的removeNull()函数究竟出了什么问题导致它只替换列表中的第一个空字符串''?我如何修复它以使其适用于列表中的所有空字符串?

为了澄清,像这样的表每行只有一个 NULL值,或者一旦转换为列表就会出现空字符串,效果很好。

ID   Volts   Current   Watts
0    383               0
1    383     1         383
2    382     2         764

['0', '383', '', '0'] 工作正常。

但是,如果我有一个这样的表,每行有多个 NULL值,它只会替换转换列表中的第一个空字符串,而不会对其余字符串执行任何操作。

ID   Volts   Current   Watts
0                      0
1    383     1         383
2    382     2         764

['0', '', '', '0'] 无效。

1 个答案:

答案 0 :(得分:5)

因为list.index只返回列表中第一次出现的索引。您可以在每行使用列表推导来进行替换:

def removeNull(row):
    return ['0' if i=='' else i for i in row]
    #       |<- ternary op. ->|  

列表推导中的三元运算符将空格字符串替换为'0',而其他字符串则按原样返回。

在旁注中,您的函数不会修改row 就地,因此,您需要将函数的返回值赋给row:< / p>

for row in csvFile:
    row = removeNull(row)
    print(row)