Неправильная перезапись текстового файла (Python)

Моя программа должна брать текстовый файл, печатать содержимое, подсчитывать строки, запрашивать ввод строки, удалять каждое вхождение этой строки, сообщать, сколько раз строка была удалена, а затем выводить новое содержимое файла. Нас попросили использовать один файл, а не входной и выходной файл.

Мой код работает и делает все, что должен, до тех пор, пока я не попытаюсь сохранить изменения в файле в конце функции char_count, а функция print_output вообще не работает.

Если у меня есть входной файл содержимого:

Apples
Oranges
Bananas
Apples
Oranges
Bananas

если я попытаюсь удалить Bananas, результирующее содержимое файла для входного файла:

ApplesOrangesApplesOrangesles
Oranges
Bananas

Я пытался выяснить, что происходит, но безрезультатно, и в нашем учебнике по курсу, похоже, не упоминается перезапись входных файлов, но мы обязаны сделать это для задания. Что не так с моими двумя последними функциями?

def main():

    input_file_name = input("Please Enter the name of your text file: ")
    infile = open(input_file_name, "r+")
    print()

    print("---------------------------------------")
    print("THE FILE CONTENTS ARE")
    print("---------------------------------------")
    print_file(infile)
    print("---------------------------------------")
    count_lines(infile)
    print("---------------------------------------")
    input_string = input("Please enter the word or string of words you want to remove from the text file: ")
    print("---------------------------------------")
    char_count(infile, input_string)
    print("---------------------------------------")
    print("THE NEW FILE CONTENTS ARE")
    print_output(infile)
    print("---------------------------------------")

    infile.close()

def print_file(infile):
    infile.seek(0)
    allLines = infile.readlines()
    for line in allLines:
        text = line.rstrip()
        print(text)

def count_lines(infile):
    infile.seek(0)
    allLines = infile.readlines()
    count = 0
    char = " "
    for line in allLines :
        text = line.rstrip()
        while char != "":
            char = infile.read(1)
        count = count + 1
    print("THE NUMBER OF LINES IS: %d " % count)

def char_count(infile, input_string) :
    count = 0
    infile.seek(0)
    allLines = infile.readlines()
    infile.seek(0)
    for line in allLines:
        while input_string in line:
            line = line.replace(input_string, "")
            count = count + 1
        text = line.rstrip()
        infile.write(text)
    print("NUMBER OF OCCURRENCES REMOVED IS: %d" % count)

def print_output(infile):
    infile.seek(0)
    allLines = infile.readlines()
    for line in allLines:
        text = line.rstrip()
        print(text)
main()

person C.StG    schedule 13.11.2017    source источник


Ответы (1)


вы должны сначала обрезать файл, чтобы получить требуемый результат.

def main():

    input_file_name = input("Please Enter the name of your text file: ")
    infile = open(input_file_name, "r+")
    print()

    print("---------------------------------------")
    print("THE FILE CONTENTS ARE")
    print("---------------------------------------")
    print_file(infile)
    print("---------------------------------------")
    count_lines(infile)
    print("---------------------------------------")
    input_string = input("Please enter the word or string of words you want to remove from the text file: ")
    print("---------------------------------------")
    char_count(infile, input_string)
    print("---------------------------------------")
    print("THE NEW FILE CONTENTS ARE")
    print_output(infile)
    print("---------------------------------------")

    infile.close()

def print_file(infile):
    infile.seek(0)
    allLines = infile.readlines()
    for line in allLines:
        text = line.rstrip()
        print(text)

def count_lines(infile):
    infile.seek(0)
    allLines = infile.readlines()
    count = 0
    char = " "
    for line in allLines :
        text = line.rstrip()
        while char != "":
            char = infile.read(1)
        count = count + 1
    print("THE NUMBER OF LINES IS: %d " % count)

def char_count(infile, input_string) :
    count = 0
    infile.seek(0)
    allLines = infile.readlines()
    infile.seek(0)
    infile.truncate() #Empty your file first to rewrite it
    for line in allLines:
        while input_string in line:
            line = line.replace(input_string, "")
            count = count + 1
        text = line.rstrip() 
        if(text != ""):
            infile.write(text + "\n") #To write in multiple lines
    print("NUMBER OF OCCURRENCES REMOVED IS: %d" % count)

def print_output(infile):
    infile.seek(0)
    allLines = infile.readlines()
    for line in allLines:
        text = line.rstrip()
        print(text)
main()
person Himanshu Bansal    schedule 13.11.2017
comment
Большое спасибо! Я совершенно забыл поставить условие для текста в конце char_count, и раньше у меня был .truncate(), но он был не в том месте. - person C.StG; 13.11.2017
comment
Добро пожаловать, и не забудьте принять ответ, если вы удовлетворены ответом - person Himanshu Bansal; 14.11.2017