【问题标题】:Python Best Practice to Remove Whitespace Variations from List of Strings [closed]从字符串列表中删除空格变化的 Python 最佳实践 [关闭]
【发布时间】:2020-01-31 04:27:36
【问题描述】:

是否有从 Python 中的字符串中删除奇怪的空白 unicode 字符的最佳做法?

例如,如果一个字符串在此table 中包含以下 unicode 之一,我想将其删除。

我正在考虑将 unicodes 放入一个列表中,然后使用 replace 进行循环,但我确信有一种更 Pythonic 的方式。

【问题讨论】:

  • 使用正则表达式会很pythonic。正则表达式是标准 Python 包的一部分。
  • 看看这篇文章。它不是重复的,但它可能会有所帮助。 stackoverflow.com/questions/37903317/…
  • 在我看来,不要太担心编写“pythonic”代码。我认为这个词可能会适得其反,因为我认为它甚至没有那么明确的定义。以你能想到的最优雅的方式编写代码,然后如果有一天你能想到一种更优雅的方式,然后重写代码。如果您只想删除某些字符,那么我认为将这些字符放在一个列表中并以这种方式删除它们就可以了。只要这是在您创建的简单函数中完成的,那么如果您需要提高性能,那么您可以对其进行编辑

标签: python data-cleaning removing-whitespace


【解决方案1】:

你应该可以用这个

[''.join(letter for letter in word if not letter.isspace()) for word in word_list] 

因为如果您阅读str.isspace 的文档,它会说:

如果字符串中只有空白字符且至少有一个字符,则返回True,否则返回False。

如果在 Unicode 字符数据库(参见 unicodedata)中,一个字符是空白字符,或者它的一般类别是 Zs(“分隔符,空格”),或者它的双向类是 WS、B 或 S 之一。

如果您查看unicode character list 类别Zs

【讨论】:

    【解决方案2】:

    在这种情况下,正则表达式是你的朋友,你可以简单地迭代你的列表,应用正则表达式替换

    import re
    r = re.compile(r"^\s+")
    
    dirty_list = [...]
    # iterate over dirty_list substituting
    # any whitespace with an empty string
    clean_list = [
      r.sub("", s)
      for s in dirty_list
    ]
    

    【讨论】:

    • 不错!我刚刚进行了测试以确保 \s 确实与维基百科列表中的所有特殊空格匹配。
    猜你喜欢
    • 2010-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    • 2013-07-28
    • 1970-01-01
    • 2021-05-21
    相关资源
    最近更新 更多