2016-03-27 10 views
-3

Pythonで一時ファイルに変数を書くが、私は次のエラーを取得する方法:は、私は一時的なテキストファイルに変数を書き込むしようとしている

import tempfile 
TEMPDIR=tempfile.TemporaryFile() 
TEMPDIR.write("""B5IB6-ELAZ1-RAPY9-V8X1I-3 
OKXVB-Q8B9G-IT9ZF-MI4EQ-2 
PLDZ6-769YT-YJSR4-682JT-7 
H67L5-9HO4C-4UDSR-BYA14-6 
Y73EC-S8OJG-O1APH-N41KM-3 
JCYVV-UXNIN-9RGSU-WQ9SD-1 
WL9AO-9BLI7-GXXGM-VESEU-2 
VDLHT-IXMUY-V4FPU-V3IFZ-1 
8CPVN-Z776Z-Y49J3-2C683-5 
ORXQC-IIHL2-6AV55-FIJEV-2""") 
Activation=input('Please Enter your Product Activation Key: ') 
if Activation in TEMPDIR: 
    print('True') 
else: 
    print('False') 

Traceback (most recent call last): 
    File "F:/A453/_Codes_/APP CONFIG/Temp.py", line 102, in <module> 
    ORXQC-IIHL2-6AV55-FIJEV-2""") 
    File "C:\Program Files (x86)\Python34\lib\tempfile.py", line 399, in  func_wrapper 
    return func(*args, **kwargs) 
TypeError: 'str' does not support the buffer interface 

私のスクリプトは以下の通りであります

私はこのエラーを克服する助けてください

おかげ

+0

TEMPDIR.write("foo".encode("utf-8")) 

またはすぐbytesオブジェクトを使用します通常のファイルには、私は推測します: 'f = open(TEMPDIR、 'w'); f.write(something) ' – yedpodtrzitko

+1

エラーを検索し、受け取ったメッセージに基づいていくつかの解決策を試しましたか? – idjaw

+0

[これらのソリューション](http://stackoverflow.com/search?q=TypeError%3A+%27str%27+does+not+support+the+buffer+interface)を試しましたか? –

答えて

1

Fを開くために使用されるデフォルト・モードTempFileによって返されたileは'w+b'です。その文字列のbは、バイナリモードで開かれたことを意味し、実行中のstrインスタンスではなくbytesインスタンスをwriteメソッドに渡す必要があります。

あなたはいくつかの選択肢があります。文字列をbytesにエンコードすることができます。または、TempFileにモードを渡して、ファイルをテキストモードで開くことができます(writeではUnicode strインスタンスが必要です)。おそらく適切なモードを使用する方が良い解決策ですが、あなたの走行距離は変わることがあります。

2

TemporaryFileのデフォルトモードは"w+b"です。バイナリ。

TEMPDIR = tempfile.TemporaryFile(mode="w+") 
0

docsは、書き込み先のファイルを開くときtempfileはデフォルトでバイナリモードを使用していることを説明:あなたは、テキストに対して明示的にモードを提供する必要があります。したがって、文字列を書くことはできません(これはテキストモードでのみ動作します)。bytesオブジェクトのみです。

だから、どちらか(ダニエルの答えのように)そのデフォルトを上書き、または適切なエンコーディングを使用して文字列をエンコード:と同じように

TEMPDIR.write(b"""B5IB6-ELAZ1-RAPY9-V8X1I-3...") 
関連する問題