python 中的文件“~”分隔文件中的问题

issue in file "~" seperated file in python

我是 Python 的新手。 我在文件夹中有“~”分隔的文件,例如

2021-11-02 23:04:17.106
#$!pre-dump!$#00067evnISO-8859-1    
#$!languages!$#
##$!cdf!$#
UAFR~UAFRICA~
UEUE~UEUR (CIS + TURKEY)~
UEUW~UEUR (WESTERN)~
UFEA~UASIA~
UGBR~UUNITED KINGDOM~
ULAM~ULATIN AMERICA~
UMEA~UMIDDLE EAST~
UNAM~UNORTH AMERICA~
UOCE~UOCEANIA~
UUSA~UUSA~

文件中可能有没有“~”的行。 我需要在文本文件中获取包含“~”的行,这是我完成的 python 脚本

import os
sourcepath = os.listdir('input/')
for file in sourcepath:
    input_file = 'input/' + file
    print('conversion is going for:' + input_file)
    with open(input_file, 'r+', encoding='cp437') as input_file:
        input_file.seek(0)
        lines = input_file.readlines()
        input_file.seek(0)
        for line in lines:
            if "~" in line:
                input_file.write(line)

以下为输入文件截图 input file screenshot 这是我在 运行 上面的 python 脚本之后得到的输出 output of the python script 我真的不知道我哪里错了...... 请帮助我..

如果您写入的新数据少于原始文件大小,就地重写文件不会删除无关数据。但这是一个微不足道的修复;重写后 explicitly truncate the file,例如:

import os

for file in os.listdir('input/'):
    input_file = 'input/' + file
    print('conversion is going for:' + input_file)
    with open(input_file, 'r+', encoding='cp437') as input_file:
        # Removed unnecessary initial seek; r+ defaults to beginning of file
        lines = input_file.readlines()
        input_file.seek(0)
        for line in lines:
            if "~" in line:
                input_file.write(line)
        input_file.truncate()  # With no arguments, truncate truncates to current file offset

可选地,truncate 可以在 .seek(0) 之后完成,这会在重写任何文件之前清空文件(如果写出错误,则有丢失所有数据的风险)新数据,并可能导致新文件使用新磁盘扇区而不是重新使用已分配的扇区 space).