【问题标题】:No removal of null values (Python)不删除空值(Python)
【发布时间】:2013-04-17 16:29:14
【问题描述】:

为了处理多个 CSV 文件的内容,我必须从 string-list-elements 过滤几个字符,尤其是 NULL 值。为此,我尝试了网络上的几种解决方案。其中之一是以下函数:

def removeNull(rawString):
    l = filter("\u0000", list(rawString))
    newString = ''.join(l)
    printUtil.printAll(newString, "\n")
    return newString

但是,它总是给我TypeError: 'str' object is not callable,终止程序。更复杂的解决方案没有给我一个错误,但它们完全没有改变,NULL 值仍然存在。

此外,如果我用除None 以外的任何其他值交换\u0000(这不会导致任何更改),我会收到相同的错误消息。

希望有人可以为我解决这个问题,因为经过 4 或 5 个小时的反复试验,我已经没有想法了。

感谢您的回答和建议!

解决问题:

错误消息源于我使用"\u0000" 作为内置过滤器功能的参数。该特定问题的两个有效解决方案侧重于传递必要的功能:

l = filter(lambda x: x != '\u0000',rawString)

l = filter(lambda x:ord(x) != 0, list(rawString))

【问题讨论】:

    标签: python string python-3.x null


    【解决方案1】:

    filter 期望第一个参数是一个函数(或者,更准确地说是一个callable)。然后它遍历第二个参数,将每个参数传递给函数。如果函数返回类似 False 的值,则会在输出中跳过它。

    你可以试试:

    l = filter(lambda x: x != '\u0000',rawString)
    

    【讨论】:

    • 这会删除空值。但是,对于给定的输入,它之后会返回乱码。我不知道为什么只删除空值时写入文件的过滤内容与原始内容和控制台输出完全不同。如果需要,我可以上传我的输入和输出文件,以便更清楚地了解发生了什么。编辑:Joran Beasleys 解决方案也是如此。
    • 澄清一下:进入删除函数的字符串在保存到文件时表现得像一个字节数组,至少我必须进入二进制写入模式。不幸的是,我不太了解这个结果,但至少它现在有效。
    【解决方案2】:
    l = filter(lambda x:ord(x) != 0, list(rawString))
    

    应该会更好

    让它更透明

    def is_not_null(ch):
        return ch != u'\u0000'
    
    print filter(is_not_null,list(rawString))
    

    【讨论】:

    • 控制台窗口中的结果似乎是正确的,但是将其保存到文件时会出现意外问题(请参阅我对 mgilson 解决方案的回复)。
    • 稍后我将不得不对此进行调查。感谢你们俩,最终的解决方案可能已经临近。
    猜你喜欢
    • 2019-04-25
    • 1970-01-01
    • 2018-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多