Сосредоточение на каждом значении в списке - PullRequest
0 голосов
/ 18 ноября 2018

Итак, у меня есть файл с несколькими строками текста:

here's a sentence
look! another one
here's a third one too
and another one
one more

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

Кроме того, когда я запускаю этот код:

file_lines = open(file_name).readlines()
print(file_lines)
file_lines.reverse()
print(file_lines)

все работает ипорядок строк обратный, но когда я запускаю этот код:

text_file = open(file_name, "w")
file_lines = open(file_name).readlines()
print(file_lines)
file_lines.reverse()
print(file_lines)
for line in file_lines:
    text_file.write(line)

, он печатает пустые списки по некоторым причинам.

Ответы [ 2 ]

0 голосов
/ 18 ноября 2018

Вы можете исправить это, сделав всего 2 небольших изменения в вашем скрипте.

  1. Используйте \r+ вместо \w+

  2. Перед выполнением операции записи поместите индикатор положения файла в начало

    text_file.seek(0)

"rw_file.txt - до операции

here's a sentence
look! another one
here's a third one too
and another one
one more

Ниже приведен ваш измененный скрипт для обращения к содержимому файла (это сработало).

def reverseFile(file_name):
    text_file = open(file_name, "r+") # Do not use 'w+', it will erase your file content 
    file_lines = [line.rstrip('\n') for line in text_file.readlines()]
    file_lines.reverse()
    print(file_lines)

    text_file.seek(0) # Place file position indicator at beginning

    for line_item in file_lines:
        text_file.write(line_item+"\n")


reverseFile("rw_file.txt")

"rw_file.txt - после операции

one more
and another one
here's a third one too
look! another one
here's a sentence
0 голосов
/ 18 ноября 2018

Если вы откроете файл в режиме 'w', файл будет удален.Из документов :

'w' только для записи (существующий файл с тем же именем будет удален)

Вы также должны использоватьключевое слово with:

Рекомендуется использовать ключевое слово with при работе с объектами файла.Преимущество заключается в том, что файл правильно закрывается после завершения его набора ...

Я бы порекомендовал вам прочитать сначала содержимое файла, обработать эти данные, а затем запись :

def reverseFile(file_name):
    with open(file_name, 'r') as f:
        file_lines = [line.rstrip('\n') for line in f.readlines()]
    file_lines.reverse()
    with open(file_name, "w") as f:
        for line in file_lines:
            f.write(line + '\n')

reverseFile('text_lines.txt') 
...