Лучший способ записать в файл? - PullRequest
3 голосов
/ 01 августа 2020

Цель:

У меня есть файл с именем airplanes.txt. Он уже содержит некоторые из моих любимых самолетов:

Boeing 747
Airbus A380

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

Пример: Please type the name of the plane you want to add to your favourites list: < >

Если вы посмотрите на файл airplanes.txt, вы увидите:

Boeing 747
Airbus A380
Boeing 737

Мой вопрос: мой код ниже работает, сначала получая существующие данные в airplanes.txt.

airplane_file = open('airplanes.txt', 'r')

favourite_airplanes = [ line.strip('\n') for line in airplane_file.readlines()]

airplane_file.close()

Затем я закрываю файл, а затем беру пользовательский ввод.

add_plane = input('Enter The Airplane You Would Like To Add To This List: ')

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

if add_plane != None:
    reopened_airplane_file = open('airplanes.txt', 'r+')
    for airplane in favourite_airplanes:
        reopened_airplane_file.write(f'{airplane}\n')
    else:
        reopened_airplane_file.write(f'{add_plane}\n')

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

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

I я попытался сделать этот вопрос как можно более читабельным, деконструировав мой код, поэтому я надеюсь, что вы не возражаете против длинного вопроса. :)

Изменить:

Это сработало для меня:

with open('airplanes.txt', 'a+') as file:
    add_plane = input('Enter The Airplane You Would Like To Add To This List: ')
    file.write(f'{add_plane}\n')

Почему это не работает: я использовал режим r+, что означало, что я была перезаписана, хотя режим a+ был подходящим для использования! a+ открыт для чтения и добавления (запись в конце файла). Если файл не существует, создается.

Ответы [ 4 ]

2 голосов
/ 01 августа 2020
with open("airplanes.txt", "a+") as ap_txt:
    add_plane = input('Enter The Airplane You Would Like To Add To This List: ')
    ap_txt.write("\n{}".format(add_plane))
2 голосов
/ 01 августа 2020

Вы можете открывать файлы в разных режимах, то есть читать их, записывать в них или добавлять к ним. Это делается через второй параметр «r», «w», «a», необязательно с «+» или «b» для «байтового режима». Кроме того, используйте вместо него with open(...). Тем не менее, вы можете использовать:

with open("test.txt", "a+") as file:
    file.write("\nBoeing 737")
1 голос
/ 03 августа 2020
with open('airplanes.txt', 'a+') as f:

 fav_air = f.readlines()

planes_list = [i.strip() for i in fav_air] 

add_plane = input('Enter The Airplane You Would Like To Add To This List: ') 

for plane in planes_list:

      if add_plane != plane:

             f.write("\n")
        
            # Append text at the end of file
        
             f.write(plane)
     
      else:

            print(" Airplane already in the list") 
1 голос
/ 01 августа 2020

Вы можете читать и писать / добавлять в файл одновременно, так что вот как это будет работать в вашем случае:

with open('airplanes.txt', 'a+') as airplane_file:
    
    favourite_airplanes = [line.strip('\n') for line in airplane_file.readlines()]
    
    add_plane = input('Enter The Airplane You Would Like To Add To This List: ')
    
    if add_plane != None:
        airplane_file.write(f'{add_plane}\n')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...