2012-11-13 3 views
1

Possible Duplicate:
builtins.TypeError: must be str, not bytesEOFError Python 2.7 3 миграции

Я написал программу, чтобы написать Dict в файл и в Python 2.7, работает хорошо, но теперь в Python 3 я получаю TypeError: 'str' does not support the buffer interface и TypeError: must be str, not bytes

КОД ОБНОВЛЕНО

Входы: путь к директории, имя файла (!hamers.txt, например) и новый словарь

Выходы: нет

эффекты: Создать новый файл с словарем. Проверьте, существует ли файл, а затем слияние двух словарей (существующих и новых).

def generate_file_from_dict(self, path, fname, my_new_dict):     
        mfile = self.add_slash(path)+fname 
      if os.path.exists(mfile): 
        mfile = open(mfile, 'rb') 
        my_existing_dict = pickle.load(mfile) 
        my_new_dict = dict(my_existing_dict.items() + my_new_dict.items()) 
        mfile.close() 
      mfile = open(self.add_slash(path)+fname, 'wb+') 
      pickle.dump(my_new_dict, mfile) 
      mfile.close() 

Теперь его

my_existing_dict = pickle.load(mfile) 
EOFError 
+0

Я всегда озадачены такого рода вопрос, не ошибка сказать, что именно проблема в? Он говорит, что '' должен быть str, а не байтами ''. Как иначе это можно интерпретировать, а означать, что вы пытаетесь передать «байты», когда вам нужно передать «str». – SilentGhost

+0

Хммм ... может быть, я прошу, потому что на Python 2.7 он отлично работает !? – JohnDow

+0

Можете ли вы читать документы? – SilentGhost

ответ

2

Файл должен открыт в двоичном

mfile = open(mfile,'rb') 

mfile = open(self.add_slash(path)+fname, 'wb+') 
+0

'my_existing_dict = pickle.load (mfile) TypeError: 'str' не поддерживает буферный интерфейс' – JohnDow

+1

@ VladislavIl'ushin: все вызовы' open' должны использовать режим 'b' при использовании pickle. **все звонки. – SilentGhost

+0

ОК, отредактируйте его, но теперь 'my_existing_dict = pickle.load (mfile) EOFError', где mfile -' mfile = open (mfile, 'wb +') ' – JohnDow

Смежные вопросы