如何在python中将变量写入临时文件

时间:2016-03-27 12:02:17

标签: python python-3.x temporary-files

我一直在尝试将变量写入临时文本文件,但是我收到以下错误:

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')

请帮我克服这个错误

由于

3 个答案:

答案 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