【问题标题】:Removing empty items from a list (Python)从列表中删除空项目(Python)
【发布时间】:2011-01-17 21:14:09
【问题描述】:

我正在读取格式不正确的 Python 文件,值由多个空格和一些制表符分隔,因此返回的列表有很多空项,我该如何删除/避免这些?

这是我当前的代码:

import re

f = open('myfile.txt','r') 

for line in f.readlines(): 
    if re.search(r'\bDeposit', line):
        print line.split(' ')

f.close()

谢谢

【问题讨论】:

    标签: python regex list split


    【解决方案1】:

    不要明确指定' ' 作为分隔符。 line.split() 将拆分所有空格。相当于使用re.split:

    >>> line = '  a b   c \n\tg  '
    >>> line.split()
    ['a', 'b', 'c', 'g']
    >>> import re
    >>> re.split('\s+', line)
    ['', 'a', 'b', 'c', 'g', '']
    >>> re.split('\s+', line.strip())
    ['a', 'b', 'c', 'g']
    

    【讨论】:

    • 忘记了 string.split() 在 runs 的空白处没有参数拆分。 +1
    • 太棒了,它确实从行中删除了几乎所有的空白,除了开头的一个和结尾的一个,奇怪。
    • re.split('\s+', line.strip()) 会解决这个问题
    • @jcoon: 或line.strip().split()
    • Nimbuz,line.split() 将负责在开始/结束时去除空白。
    【解决方案2】:
    for line in open("file"):
        if " Deposit" in line:
             line=line.rstrip()
             print line.split()
    

    更新:

    for line in open("file"):
        if "Deposit" in line:
             line=line.rstrip()
             print line[line.index("Deposit"):].split()
    

    【讨论】:

    • 请注意" Deposit" in line 不等同于re.search(r'\bDeposit', line)。后者将匹配"this,Deposit",而前者不会。
    【解决方案3】:
    linesAsLists = [line.split() for line in open('myfile.txt', 'r') if 'Deposit' in line)]
    

    【讨论】:

      【解决方案4】:

      为什么在处理之前不做line.strip()呢?此外,您可以使用 re.split 来使用像 '\s+' 这样的正则表达式作为分隔符。

      【讨论】:

      • for line in f.readlines(): line.strip(); continue_processing...所以 cmets 对 Python 代码不友好。
      • 这只会从字符串的头部/尾部删除空格
      • 如果您在没有参数的情况下执行line.split(),您将免费获得strip' a b c d '.split() == ['a', 'b', 'c', 'd']
      猜你喜欢
      • 1970-01-01
      • 2022-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-29
      • 2013-08-03
      相关资源
      最近更新 更多