删除外部文本文件中的行

时间:2014-04-02 12:00:52

标签: python-2.7

嗨,请问我如何迭代外部文件中的行,识别每行的最后一个索引处的0,并在检索未删除的行时删除这些行。即

input.txt = 1001 1001 0 
            1001 1002 0 
            1001 1003 0.058529
            ...
            ...
            ...
            9007 9007 0.0789

我试过这个

with open('input.txt', 'r') as handle:
    for line in handle:
    o_d = line.split()
    if o_d[-1] == '0':
        o_d.pop()
        print o_d

我知道这只会在每一行中取零0,但是我需要帮助删除0出现的整行,然后用不具有零的行写回文件。

谢谢

1 个答案:

答案 0 :(得分:1)

这非常接近您的代码。唯一的问题是您需要致电str.strip,因为readlines包含尾随换行符。

此代码首先读入所有数据,然后写入以“0”结尾的所有行,而不是尝试修改文件。

# Read in the source data
with open('input.txt', 'r') as handle:
    lines = handle.readlines()
# Open the output file
with open('input.txt', 'w') as handle:
    # Examine each line of the source data
    for line in lines:
        # If it doesn't end with a '0', write it
        if line.strip()[-1] != '0':
            handle.write(line)

根据您的请求格式化最后一行的一种方法是将行拆分为单独的值,将它们放入元组中,然后将它们插入格式字符串中,然后写入。例如:

"[(%s,%s,{%s})]" % tuple(line.split())

所以完整的代码将是

# Read in the source data
with open('input.txt', 'r') as handle:
    lines = handle.readlines()
# Open the output file
with open('input.txt', 'w') as handle:
    # Examine each line of the source data
    for line in lines:
        # If it doesn't end with a '0', write it
        if line.strip()[-1] != '0':
            line.split()
            handle.write("[(%s,%s,{%s})]" % tuple(line.split()))