代码之家  ›  专栏  ›  技术社区  ›  user71216

Pickle(Python 3.6)写入空文件

  •  0
  • user71216  · 技术社区  · 7 年前

    我试图自学Python,因此创建了一个愚蠢的脚本来检查博客网站,检查新的更新,然后保存与更新相关的元数据。如果有新帖子,我会打开之前的元数据,附加新的元数据,然后保存。然而,我发现这些更新经常会产生一个空文件(不知道它什么时候起作用,什么时候不起作用),我会丢失所有的元数据。

    if new_post_count > 0:
            file_name = 'all_posts' + user
    
            previous_posts = pickle.load(open(file_name, 'rb'))
    
            current_posts = get_posts(client, user, start_from_posts=0, total_posts=new_post_count)
    
            all_posts = previous_posts.extend(current_posts)
    
            f = open(file_name, 'wb')
            pickle.dump(all_posts, f)
            f.close() 
    

    看看论坛,除了pickle(有什么建议吗?)之外,使用其他东西来保存我的数据可能更有意义。即使是这样,我还是想知道我做错了什么,这样以后就不会再犯同样的错误了。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Amos    7 年前

    问题不在于pickle模块,而在于这行代码:

     all_posts = previous_posts.extend(current_posts)
    

    实际上发生的是 延伸 方法,扩展之前的_帖子,一旦成功完成就会返回关键字 没有一个 .

    然后将该关键字分配给所有_帖子,而不是之前的_帖子的内容,然后将其写入文件。

    尝试按如下方式修改它:

    if new_post_count > 0:
        file_name = 'all_posts' + user
    
        previous_posts = pickle.load(open(file_name, 'rb'))
    
        current_posts = get_posts(client, user, start_from_posts=0, total_posts=new_post_count)
    
        previous_posts.extend(current_posts)
    
        f = open(file_name, 'wb')
        pickle.dump(previous_posts, f)
        f.close() 
    

    最好包括让·弗朗索瓦的建议:

    if new_post_count > 0:
        file_name = 'all_posts' + user
        with open(file_name, 'rb') as f:
            previous_posts = pickle.load(f)
    
        current_posts = get_posts(client, user, start_from_posts=0, total_posts=new_post_count)
    
        previous_posts.extend(current_posts)
    
        with open(file_name, 'wb') as f:
            pickle.dump(previous_posts, f)