【问题标题】:python write file .txt isn't saving output correctlypython写入文件.txt没有正确保存输出
【发布时间】:2020-05-10 10:54:29
【问题描述】:

我在 .txt 中有一系列 url 我想打印我对新 .txt 所做的 python 更改

我的 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

【问题讨论】:

  • 最简单的方法可能是先打开文件,然后在写入所有行时保持打开状态。现在你正在为每一行打开并覆盖它(模式'w'覆盖旧内容)

标签: python python-3.x list file


【解决方案1】:

writelines() 没有将 new_list 附加到 listurls.txt。它正在做的是:-

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

在第一次迭代中。

在下一次迭代中,

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

而不是

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

要解决此问题,请以附加模式打开 listurl,而不是写入模式。

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)

【讨论】:

    【解决方案2】:

    问题在于您将列表写入文件的方式。实际上,您在这段代码中覆盖了每个列表元素的文件:

    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)
    

    最简单的方法更正它是将文件打开模式从写入和覆盖(open 函数中的"w")更改为如果丢失和附加("a") .

    但是,正确的方法是打开文件一次并将整个列表写入其中,而不是每次都重新创建文件。

    让我们更正它,将 for 放入 with 上下文管理器中:

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

    【讨论】:

      【解决方案3】:

      以附加模式打开您的文件。使用此代码写入文件

      with open("listurls", "a") as myfile:
          myfile.write(new_list)
      

      【讨论】:

      • 我很感激。这正是我想要的。我一定在文档中错过了这一点。
      猜你喜欢
      • 2020-08-08
      • 2015-01-21
      • 1970-01-01
      • 2017-04-29
      • 1970-01-01
      • 2016-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多