从txt文件中删除以xyz结尾的行

时间:2018-07-07 11:13:14

标签: python python-3.x

我正在尝试编写python代码来检查.txt文件中的每一行,如果该行以A /或Z /结尾,则将该行删除。这是我写的,请帮助我继续前进。

f = open('test.txt', 'r')
for line in f.readlines():
    if (line.endswith("A/") or line.endswith("Z/")):
        Remove that line in test.txt

4 个答案:

答案 0 :(得分:1)

获取所有行。在所需的写入和写入行中打开同一文件-

f = open('file.txt', 'r')
lines = f.readlines()
f.close()
f = open('file.txt', 'w')
for line in lines:
    if not line.endswith(("A/", "Z/")):
        f.write(line)
f.close()

答案 1 :(得分:1)

您无法写入要读取的文件。因此,将其写入新文件,然后将新文件重命名为旧文件。

line也将以\n\r\n结尾。因此,检查line.endswith("A/")总是会失败。所以最好使用基于正则表达式的检查

import re
import os
with open('test.txt', 'r') as in_file:
    with open('test2.txt', 'w') as out_file:
        for line in in_file.readlines():
            if re.search(r'[AZ]/[\r\n]+', line):
                continue
            out_file.write(line)

os.rename('test2.txt', 'test.txt')

答案 2 :(得分:0)

您可以首先打开文件,并将行保留在以A/Z/结尾的列表中:

keep = []
with open('test.txt') as in_file:
    for line in in_file:
        # store in temporary variable to not disrupt original line
        temp = line.rstrip() 
        if not temp.endswith('A/') and not temp.endswith('Z/'):
            keep.append(line)

然后,您可以随后将该列表中的行写到同一文件中:

with open('test.txt', 'w') as out:
    for line in keep:
        out.write(line)

注意:由于文件中的行末可以包含\r\n个字符,因此您可以使用str.rstrip()删除它们。这是必需的,因为A/\n之类的字符串将在str.endswith('A/')上失败。

答案 3 :(得分:0)

好吧,您不能同时打开同一文件来读取和编辑它。
相反,您可以读取,存储内容,修改内容并重新写入同一文件而无需打开文件新文件或无需再次打开同一文件。

import re
new_lines = []
with open('sample.txt', 'r+') as f:
    lines = f.readlines()
     for i, line in enumerate(lines):
         if not re.search(r'[AZ]/[\r\n]+', line):
             new_lines.append(line)           # store the content 
    f.truncate(0)     # empty file
    f.seek(0)         
    for line in new_lines:
        f.write(line)   # write into same file