получение объектов двоичного файла

#python #file

#python #файл

Вопрос:

Я могу получить все объекты в файле. вот ошибка, с которой я столкнулся :

 with open("Resultfill", "rb") as Resultfillread:
    FileNotFoundError: [Errno 2] No such file or directory: 'Resultfill'
  

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

Но я всегда не могу получить доступ к объектам, содержащимся в файле, особенно с yield помощью . Вот объекты, содержащиеся в двоичном файле файла ‘testfile’

 di = {"c1": 3, "c2": 5, "c3": 13, "c4": 12, 5: 8, 6: 8, 7: 1, 8: 5, 9: 12, 10: 2, 11: 20, 12: 16, 13: 45, 14: 6, 15: 4 }
di = {1: 3, 2: 5, 3: 13, 4: 12, 5: 8, 6: 8, 7: 1, 8: 5, 9: 12, 10: 2, 11: 20, 12: 16, 13: 45, 14: 6, 15: 4 }
  

Вот код :

 os.chdir("C:/Program Files/Sublime Text 3/testpython")
open("testfile", "ab")
def loadobject(fillname):
        with open(filename, "rb") as test:
            while True:
                 try:
                     yield pickle.load(test)
                 except EOFError:
                     break

genaratetest = loadobject("testfile")
print(Resultfillwrite)
for testobject in genaratetest:
     print(testobject)
  

Я бы хотел, чтобы print (testobject) печатал по одному объекту в каждом повороте цикла, в данном случае здесь первый словарь ‘di’, затем второй.

Ответ №1:

Если вы пишете новый файл, он будет создан, если он не существует, но из open("Resultfill", "rb") того, что вы сказали, что хотите прочитать из файла. Создание нового файла и последующая попытка чтения из него не имеет особого смысла, поэтому вы получаете сообщение об ошибке.

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

Если вы пытаетесь создать новый файл или перезаписать существующий, используйте open("Resultfill", "wb")

Вы можете ознакомиться с документацией по open() для тонкостей и других опций.

Комментарии:

1. Спасибо, я создаю файл и больше никаких ошибок на этом этапе. Но я не могу получить доступ к объектам файла. В то время как объекты должны быть доступны yield , я могу использовать их неправильно. Из того, что я получаю, yield возвращает генератор, который может быть помещен в интерфейс для создания объекта на лету. Мы делаем так, как я делал, я должен получить элементы, но это не работает. Можете ли вы объяснить, почему? Я развил свой вопрос

2.Убедитесь, что вы вызываете pickle.load(test) только один раз для каждого файла. Вы хотите yield , чтобы внутри цикла, но load() должны быть вне его.