2016-12-23 6 views
1

는 내가 대답을 스택 오버 플로우에보고했지만, 내 문제가 dict하지로 반면 그들은 모두, 버퍼 인터페이스를 지원하지 str 또는 list 또는 int을 것 같다 버퍼 인터페이스를 지원하지 않습니다 지원됩니다. 어떻게해야합니까? 사전을 .bin 바이너리 파일에 복사 할 수 있습니까? 솔루션이 복잡하다면 (또는 모듈을 포함하고 있다면) 프로그래밍을 처음 접했을 때 무엇을해야하는지 설명해 주시겠습니까?형식 오류 : 'DICT'

모듈을 설치할 권한이없는 업무용 컴퓨터에 외부 모듈 (예 : numPy 또는 sciPy)을 사용할 수 없습니다. 표준 라이브러리를 사용하여이 문제를 해결했다고 믿습니다. 나는 그것이 무엇인지 알지 못합니다. 난 당신이 그런 파일에 사전을 쓸 수 없습니다 파이썬 3.4

#my code 
def writeBinary(): 
    myFile = open('books.bin','wb') #open binary file 
    book = {'Title': ' ', #create empty dictionary with keys and no values 
      'ISBN': ' ', 
      'Price': ' ', 
      'Year Of Publication': ' '} 
    end = False 
    while end != True: 
     option = input("Enter 'Y' to enter book details, or 'N' to quit: ") 
     if option == 'Y': 
      title = input("Enter the title of the book: ") #input data 
      book['Title'] = title #assign input data to dictionary keys 
      ISBN = input("Enter the ISBN of the book: ") 
      book['ISBN'] = ISBN 
      price = float(input("Enter the price of the book: £")) 
      book['Price'] = price 
      yearOfPublication = int(input("Enter the books year of publication: ")) 
      book['Year Of Publication'] = yearOfPublication 
      myFile.write(book) #write dictionary to binary file 
      print(book) #to see the current contents of the dictionary 
     elif option == 'N': 
      print("Input terminated.") 
      end = True 
     else: 
      print("Invalid input. Please try again.") 
    myFile.close() #close binary file 

writeBinary() 
+2

pickle이나 json을 사용하여 사전을 serialize해야합니다. –

+0

^^ 이미 삭제 한 질문에 대해 말씀 드렸듯이. 컨텍스트가 없으면 무엇을 기대합니까? 이것은 코드 작성 서비스가 아닙니다. 관련 모듈을 읽고 최소한 * 시도해보십시오. – jonrsharpe

+0

예, 질문을 삭제 했으므로 편집하지 못했습니다. 이번에는 더 많은 정보를 제공했습니다. 위에 표시된 코드의 대부분은 이미 작성되었습니다. 지난 몇 시간 동안 Python 문서, Pickle 및 Json 문서, CodeCademy를 ​​비롯한 사이트를 검색 한 후 내 질문이 나왔습니다. 나는 심지어 동료에게 전화를했고 우스운 이야기를했다. 그의 본능적 인 대답은 오버플로를 쌓아서 질문을 게시하는 것이었다. 나는 여기에서 기술적 인 마음이 나를 도울 수 있기를 바랬다. 방향은 간단한 링크 – Arbiter

답변

1

을 사용하고

. 직접

import json 
myFile.write(json.dumps(book)) 

또는 (myFilew 모드에서 열려 있어야하지 wb을) :

당신은 json (또는 pickle)를 사용하여 예를 들어 사전을 직렬화해야 그 다음

json.dump(book,myFile) 

다시로드하십시오.

with open('books.bin',"r") as myFile: 
    book = json.load(myFile) 

jsonpickle 이상의 이점이 있습니다. 일련 번호가 지정된 파일은 텍스트이기 때문에 직접 편집 할 수 있습니다. 그러나 더 많은 디스크 공간이 필요합니다 (압축되지 않은 경우).

+0

Thasnk 답을 얻었지만 오류가 발생했습니다 :'AttributeError : 'str'객체의 속성이 'write'입니다. 가장 이상한 일은 184 행에 있습니다 ('line 184, in dump fp.write (chunk)').) 내 프로그램은 단지 32 줄입니다. 이상한! – Arbiter

+1

죄송합니다. 파일 이름이 아니라 파일 핸들을 전달해야합니다. 내 편집을 참조하십시오. –

+2

[dump] (https://docs.python.org/3/library/json.html # basic-usage)는 파일 이름이 아닌 [파일 유사 객체] (https://docs.python.org/3/glossary.html#term-file-like-object)를 사용합니다. –