Рассол (Python 3.6) пишет пустой файл - PullRequest
0 голосов
/ 18 мая 2018

Я пытаюсь научить себя 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 Ответ

0 голосов
/ 18 мая 2018

Проблема не в модуле pickle, а в строке, которая гласит:

 all_posts = previous_posts.extend(current_posts)

На самом деле происходит то, что вызывается метод extension , расширяющий предыдущие_позиции на месте, который один разоно успешно завершено, возвращает ключевое слово Нет .

Затем это ключевое слово присваивается all_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) 
...