【问题标题】:python tab delimited retrieve column and delete empty linespython制表符分隔检索列并删除空行
【发布时间】:2012-10-10 17:47:08
【问题描述】:

我有一个制表符分隔的文本文件,它由两列组成,例如:

Apple123    2
Orange933   2
Banana33334 2

底部可能有空行。我怎样才能: 1. 去掉空行,然后 2. 写入一个只包含第一列的文件?

我现在的问题是,如果我使用 line.strip() 那么该行包含一个长度为 10(例如第一行)而不是 2 的列表。如果我使用 csv.reader(..., dialect = excel-tab) 然后我不能使用 strip() 所以我无法摆脱空行。

【问题讨论】:

    标签: python csv


    【解决方案1】:

    这应该可以解决问题:

    with open(infilename) as infile, open(outfilename) as outfile:
        for line in infile:
            line = line.strip()
            if line:
                outfile.write("{}\n".format(line.split("\t")[0]))
    

    【讨论】:

      【解决方案2】:

      您也许可以使用 Python 的基本字符串操作(str.split 等)来做到这一点:

      infile = open("/path/to/myfile.txt")
      outfile = open("/path/to/output.txt", "w") # Clears existing file, open for writing
      
      for line in infile:
          if len(line.strip()) == 0:
              # skip blank lines
              continue
      
          # Get first column, write it to file
          col1 = line.split("\t")[0]
          outfile.write(col1 + "\n")
      
      outfile.close()
      

      【讨论】:

      • 你通常最好只使用for line in infile:
      • @mgilson 好点,已编辑。我似乎永远记不起默认文件迭代器是readlines..
      • 它比这更深。 readlines() 返回一个列表。另一方面,您正在懒惰地阅读文件。换句话说,readlines() 会预先读取整个文件,而__iter__ 不会。
      • @mgilson 哦,是的 - 我认为 readlines 是一个生成器,但这种行为更有意义。是时候重新阅读我认为的file 文档了:P
      • 您可以使用xreadlines 来获取生成器,但这有点难看。 for line in infile 最好。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多