【问题标题】:Why isn't the empty string being removed from list?为什么没有从列表中删除空字符串?
【发布时间】:2011-10-13 19:33:42
【问题描述】:

我正在尝试格式化包含行和列的制表符分隔的 txt 文件。当我写入输出文件时,我试图简单地忽略其中包含任何空值的行。我通过 len(list) 方法执行此操作,如果列表的长度等于列数,则该行被写入输出文件。但是当我检查行的长度时,它们都是一样的,即使我删除了空字符串!很郁闷...

这是我的代码:

    import sys, os

    inputFileName = sys.argv[1]
    outputFileName = os.path.splitext(inputFileName)[0]+"_edited.txt"

    try:
        infile = open(inputFileName,'r')
        outfile = open(outputFileName, 'w')
        line = infile.readline()
        outfile.write(line)
        for line in infile:
        lineList = line.split('\t')
        #print lineList
        if '' in lineList:
              lineList.remove('')
        #if len(lineList) < 9:
              #print len(lineList)

              #outfile.write(line)
        infile.close()
        #outfile.close()
    except IOError:
        print inputFileName, "does not exist."

感谢您的帮助。当我在交互式窗口中创建一个实验列表并使用 if '' in list: 时,它会删除它。当我运行代码时,''仍然存在!

【问题讨论】:

  • 不要为 OP 和 Python 等对空白至关重要的语言进行空白编辑!这些会改变问题并掩盖问题。

标签: python list


【解决方案1】:

我不知道任何 python,但我可以提一下你似乎没有检查空格字符。 \r, \n 在 \t 的顶部呢?为什么不尝试修剪线条并检查它是否 == ''

【讨论】:

    【解决方案2】:

    我认为 一个 你的问题是 list.remove 只删除了元素的 first 出现。您的列表中可能还有更多空字符串。来自文档:

    从列表中删除第一个值为 x 的项目。如果没有这样的项目是错误的。

    对于remove all the empty strings from your list,您可以改用列表推导式。

    lineList = [x for x in lineList if x]
    

    或带有标识函数的filter(通过将None 作为第一个参数传递):

    lineList = filter(None, lineList)
    

    【讨论】:

    • 或者只是if x,因为唯一的False 字符串是一个空字符串。
    • 太棒了!做到了。如果你不介意,再问一个问题。如果我还想忽略负值,是否可以使用在字符串中查找“-”的通配符来执行此操作?如果可以的话,我宁愿不将列表转换为浮点数。
    • @Lin:当然……我不介意更多问题!只需再次按下“”按钮并在其中输入您的问题。然后我(或其他人)将能够回答它。
    【解决方案3】:

    由于strip() 调用,以下代码用更少的代码行完成了您的要求,并删除了任何类型的空白的空行。

    #!/usr/bin/env python
    
    import sys, os
    
    inputFileName = sys.argv[1]
    outputFileName = os.path.splitext(inputFileName)[0]+"_edited.txt"
    
    try:
        infile = open(inputFileName,'r')
        outfile = open(outputFileName, 'w')
    
        for line in infile.readlines():
            if line.strip():
                outfile.write(line)
    
        infile.close()
        outfile.close()
    except IOError:
        print inputFileName, "does not exist."
    

    编辑: 为清楚起见,这会读取输入文件的每一行,然后去除前导和尾随空格(制表符、空格等)的行,并将非空行写入输出文件。

    【讨论】:

      猜你喜欢
      • 2011-04-20
      • 1970-01-01
      • 2013-06-06
      • 1970-01-01
      • 2018-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多