我有一些.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']
无效。
答案 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)