#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()
должны быть вне его.