我一直在尝试将变量写入临时文本文件,但是我收到以下错误:
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
我的剧本如下:
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')
请帮我克服这个错误
由于
答案 0 :(得分:3)
a
的默认模式为TemporaryFile
,例如二进制文件。您必须为文本明确提供模式:
"w+b"
答案 1 :(得分:1)
用于打开TempFile
返回的文件的默认模式为'w+b'
。该字符串中的b
表示它以二进制模式打开,您需要将bytes
个实例传递给其write
方法,而不是像您正在执行的str
个实例。
您有几个选择。您可以将字符串编码为bytes
。或者,您可以将模式传递给TempFile
以使其以文本模式打开文件(以便write
期望Unicode str
实例)。使用正确的模式可能是更好的解决方案,但您的里程可能会有所不同。
答案 2 :(得分:0)
docs解释了Now I used this
$file = file_load($fid);
$uri = $file->uri;
$url = file_create_url($uri);
drupal_goto($url);
在打开要写入的文件时默认使用二进制模式。因此,您不能向其写入字符串(这仅适用于文本模式),只能写入tempfile
个对象。
因此要么覆盖默认值(如Daniel的答案),要么使用适当的编码对字符串进行编码:
bytes
或立即使用TEMPDIR.write("foo".encode("utf-8"))
对象:
bytes