不删除空值(Python)
为了处理多个CSV文件的内容,我必须从字符串列表元素中过滤几个字符,最明显的是空值。为此,我尝试了几种网络解决方案。其中之一是以下功能:不删除空值(Python),python,string,python-3.x,null,Python,String,Python 3.x,Null,为了处理多个CSV文件的内容,我必须从字符串列表元素中过滤几个字符,最明显的是空值。为此,我尝试了几种网络解决方案。其中之一是以下功能: def removeNull(rawString): l = filter("\u0000", list(rawString)) newString = ''.join(l) printUtil.printAll(newString, "\n") return newString l = filter(lambda x: x
def removeNull(rawString):
l = filter("\u0000", list(rawString))
newString = ''.join(l)
printUtil.printAll(newString, "\n")
return newString
l = filter(lambda x: x != '\u0000',rawString)
但是,它总是给我类型错误:“str”对象不可调用,终止程序。更复杂的解决方案并没有给我一个错误,但它们完全没有改变任何东西,空值仍然存在
此外,如果我用任何其他值交换\u0000
,但None
(这不会导致任何更改),我将收到相同的错误消息
希望有人能帮我解决这个问题,因为经过4到5个小时的反复试验,我已经失去了主意
谢谢你的回答和建议
解决问题:
错误消息源于这样一个事实,即我使用“\u0000”
作为内置过滤器函数的参数。针对该特定问题的两个有效解决方案侧重于传递必要的函数:
def removeNull(rawString):
l = filter("\u0000", list(rawString))
newString = ''.join(l)
printUtil.printAll(newString, "\n")
return newString
l = filter(lambda x: x != '\u0000',rawString)
或
应该会更好
让它更透明
def is_not_null(ch):
return ch != u'\u0000'
print filter(is_not_null,list(rawString))
filter
要求第一个参数是函数(或者更准确地说是可调用的)。然后它迭代第二个参数,将每个参数传递给函数。如果函数返回类似False的值,则在输出中跳过该值
你可以试试:
l = filter(lambda x: x != '\u0000',rawString)
这将删除空值。然而,对于给定的输入,它会在之后返回胡言乱语。我不知道为什么在只删除空值的情况下,编写文件的过滤内容与原始内容和控制台输出完全不同。如果需要的话,我可以上传我的输入和输出文件,以便更清楚地知道发生了什么。编辑:Joran Beasley的解决方案也是如此。需要澄清的是:进入删除函数的字符串在保存到文件时表现得像字节数组,至少我必须进入二进制写入模式。不幸的是,我不太了解这个结果,但至少它现在起作用了。在控制台窗口中,结果似乎是正确的,但是在将其保存到文件时出现了意外问题(请参阅我对mgilson解决方案的响应)。我将在稍后进行研究。多亏了你们两位,最终的解决方案可能就在眼前。