python записать файл .txt неправильно сохраняет вывод - PullRequest
0 голосов
/ 24 января 2020

У меня есть серия URL-адресов в формате .txt. Я хочу напечатать python изменений, внесенных мной, в новый .txt

Мой URLS.txt

    http://www.live.com
    http://www.twitter. com
    http://www.youtube.com

После того, как я внесите изменения в вывод терминала: print (new_list)

    ['http://www.live.com'],
    ['http://www.twitter.com'],
    ['http://www.youtube.com'],

Затем, когда я пишу в новый .txt, пишется только:

    ['http://www.youtube.com'],

Код, который я использовал для напишите в новый текст следующим образом

    with open("listurls.txt", "w") as f:
            f.writelines(new_list)

new_list является строкой

Есть ли причина, по которой я не могу заставить каждую строку печатать в моем файле .txt?

Весь код ниже, я знаю, что это немного затянуто, но это для упражнения

with open ("testurls.txt", "r") as txt_file:            
for urls in txt_file:                               
    data = urls                                     
    #print(data)                                   
    def remove(data):                               
       return data.replace(" ", "")                  
    #print (remove(data))                           
    links = (remove(data))                          
    #print(links)                                   
    def Convert(string):                            
        li = list(string.split(" "))                
        return li
    str1 = links                                    
    #print(Convert(str1))                           
    list_urls = (Convert(str1))                     
    #print(list_urls)                               
    stripped = [s.rstrip('\n') for s in list_urls]  
    #print (stripped)                               
    value = stripped                                
    for lists in value:                             
        new_list = ("['" + lists + "'],")           
        print(new_list)                            
        with open("listurls.txt", "w") as f:
            f.writelines(new_list)
            #I MADE IT THIS FAR

Ответы [ 3 ]

2 голосов
/ 24 января 2020

Откройте ваш файл в режиме добавления. Используйте этот код для записи в файл

with open("listurls", "a") as myfile:
    myfile.write(new_list)
0 голосов
/ 24 января 2020

writelines () не добавляет new_list в listurls.txt. Что он делает: -

listurls = ['http://www.live.com'],

на первой итерации.

На следующей итерации

listurls = ['http://www.twitter.com'],

вместо

listurls = ['http://www.live.com'],
           ['http://www.twitter.com'],

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

with open("listurls.txt", "w+") as f:
            f.writelines(new_list)

или

with open("listurls.txt", "a+") as f:
            f.writelines(new_list)

или

with open("listurls.txt", "a") as f:
            f.writelines(new_list)
0 голосов
/ 24 января 2020

Проблема заключается в том, как вы записываете список в файл. На самом деле, вы перезаписываете файл для каждого элемента списка в этом фрагменте кода:

for lists in value:                             
        new_list = ("['" + lists + "'],")           
        print(new_list)                            
        with open("listurls.txt", "w") as f:   # <<--- here is the problem
            f.writelines(new_list)

Самый простой способ исправить это - изменить режим открытия файла с записи и перезаписи ( "w" в функции open), для создания, если она отсутствует и добавляется ("a").

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

Давайте исправим это, поместив for в диспетчер контекста with:

    with open("listurls.txt", "w") as f:
        for lists in value:                             
            new_list = ("['" + lists + "'],")           
            print(new_list)                            
            f.writelines(new_list)
...