2016-12-23 8 views
1

をサポートしていません、私は答えをスタックオーバーフローに見てきたが、私の問題はdictではないのに対し、それらはすべて、strまたはlistまたはintバッファインタフェースによってサポートされていないように見えますサポートされています。私は何をすべきか?辞書を.binバイナリファイルにコピーできませんか?ソリューションが複雑な場合(またはモジュールを含む場合)、プログラミングに慣れていないので何をすべきか説明してください。はTypeError:「辞書」はバッファインターフェイス

外部モジュール(numPyまたはsciPy)を使用することはできません。モジュールをインストールする権限がない作業用コンピュータにあります。私は標準ライブラリを使ってこれに修正があると信じています、私はそれが何であるか分かりません。私はあなたがそのようなファイル上の辞書を書き込むことはできませんPythonの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を使用して辞書をシリアル化する必要があります。 –

+0

^^私があなたが削除した質問についてあなたに既に言ったように。文脈がなければ、他に何を期待していますか?これはコード作成サービスではありません。関連するモジュールを読んで、少なくとも*試してみてください。 – jonrsharpe

+0

はい、私はそれを編集できないので、質問を削除しました。今回私はより多くの情報を提供しました。上記のコードの大部分は既に書かれています。 Pythonのdocs、pickleとjsonのドキュメント、codeacademyを含むサイトなど、ネットを検索している最後の数時間を過ごした後、私の質問が続きます。私は同僚に電話してもらえましたが、彼の本能的な返事はオーバーフローして質問を投稿することでした...私はここで再びやりました。ここの技術者が私を助けてくれることを願っています。方向は単純なリンク – Arbiter

答えて

1

を使用しています

あなたはjson(またはpickle)を使用して、例えば、辞書をシリアル化する必要があります。

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

、または直接(myFilewモード、ないwbで開かれている必要があります):

json.dump(book,myFile) 

その後再読み込みを使用して

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

jsonは、pickleよりも利点があります。シリアル化されたファイルはテキストであるため、手作業で編集することができます。しかし、より多くのディスクスペースが必要です(圧縮されていない場合)。

+0

答えがThasnkでしたが、エラーが発生しました: 'AttributeError: 'str'オブジェクトに属性 'write''がありません。これは184行目で起こりました(' line 184、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)をとります。 –

関連する問題