TypeError:需要类似字节的对象,而不是';str';用于Python代码

TypeError:需要类似字节的对象,而不是';str';用于Python代码,python,string,object,Python,String,Object,当我试图运行一个名为NUT_check.py的代码时,我得到了这个结果,这个代码来自第69行。我非常不确定发生了什么,因为我没有自己编写这段代码,也没有广泛使用Python。第69行以一行连字符结尾以标记它 import sys import struct from struct import pack import os from util import * import string import math nut = open(sys.argv[1], "rb+") NTWU = re

当我试图运行一个名为NUT_check.py的代码时,我得到了这个结果,这个代码来自第69行。我非常不确定发生了什么,因为我没有自己编写这段代码,也没有广泛使用Python。第69行以一行连字符结尾以标记它

import sys
import struct
from struct import pack
import os
from util import *
import string
import math

nut = open(sys.argv[1], "rb+")

NTWU = readu32be(nut)
Version = readu16be(nut)
fileTotal = readu16be(nut)
nut.seek(0x10)
paddingFix = 0
for i in range(fileTotal):
    if i > 0:
            paddingFix = paddingFix + headerSize
    fullSize = readu32be(nut)
    nut.seek(4,1)
    size = readu32be(nut)
    headerSize = readu16be(nut)
    nut.seek(2,1)
    mipsFlag = readu16be(nut)
    gfxFormat = readu16be(nut)
    if NTWU == 0x4E545755:
            width = readu16be(nut)
            height = readu16be(nut)
    if NTWU == 0x4E545033:
            width2 = readByte(nut)
            width1 = readByte(nut)
            height2 = readByte(nut)
            height1 = readByte(nut)
    numOfMips = readu32be(nut)
    nut.seek(4,1)
    offset1 = (readu32be(nut) + 16)
    offset2 = (readu32be(nut) + 16)
    offset3 = (readu32be(nut) + 16)
    nut.seek(4,1)
    if headerSize == 0x60:
            size1 = readu32be(nut)
            nut.seek(12,1)
    if headerSize == 0x70:
            size1 = readu32be(nut)
            nut.seek(0x1C,1)
    if headerSize == 0x80:
            size1 = readu32be(nut)
            nut.seek(0x2C,1)
    if headerSize == 0x90:
            size1 = readu32be(nut)
            nut.seek(0x3C,1)
    eXt = readu32be(nut)
    nut.seek(12,1)
    GIDX = readu32be(nut)
    nut.seek(6,1)
    skinNum = readByte(nut)
    fileNum = readByte(nut)
    nut.seek(4,1)
    print("Slot Number %i Texture id %s,%i has %i mipmaps. Format is %i" % (skinNum/4,hex(fileNum),fileNum,mipsFlag,gfxFormat))
    if i == 0:
            offsetHeader = offset3
    if i > 0:
            offset1 += paddingFix
            offsetHeader += 0x80
    backNTime = nut.tell()
    nut.seek(offsetHeader)
    fileStr = ("%d"  % fileNum)
    outfile = open("Convert" + "/" + fileStr + ".gtx", "wb")
    outfile.write("\x47\x66\x78\x32\x00\x00\x00\x20\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x4C\x4B\x7B\x00\x00\x00\x20\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x0B\x00\x00\x00\x9C\x00\x00\x00\x00\x00\x00\x00\x00") ----------------------------------------------
    outfile.write(nut.read(0x80))
    outfile.write("\x00\x00\x00\x01\x00\x01\x02\x03\x1F\xF8\x7F\x21\xC4\x00\x03\xFF\x06\x88\x80\x00\x00\x00\x00\x0A\x80\x00\x00\x10\x42\x4C\x4B\x7B\x00\x00\x00\x20\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x0C\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00")
    outfile.seek(0x50)
    outfile.write(struct.pack(">I",1))
    outfile.seek(0xf0)
    outfile.write(struct.pack(">I",size))
    outfile.seek(8,1)
    nut.seek(offset1)
    outfile.write(nut.read(size))
    outfile.write("\x42\x4C\x4B\x7B\x00\x00\x00\x20\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00")
    outfile.close()
    nut.seek(backNTime)
nut.close()

我怀疑你用的是python3而不是python2。如果继续使用python3,请尝试将二进制ish字符串常量更改为前缀为
b

>>> outfile = open("/tmp/foo", "wb")
>>> outfile.write("\x47\x66\x78\x32\x00\x00\x00\x20\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x4C\x4B\x7B\x00\x00\x00\x20\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x0B\x00\x00\x00\x9C\x00\x00\x00\x00\x00\x00\x00\x00")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' does not support the buffer interface
>>> outfile.write(b"\x47\x66\x78\x32\x00\x00\x00\x20\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x4C\x4B\x7B\x00\x00\x00\x20\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x0B\x00\x00\x00\x9C\x00\x00\x00\x00\x00\x00\x00\x00")
64
>>> 
outfile=open(“/tmp/foo”、“wb”) >>>写一个文件。写一个文件,写一名名名名名名为:4 4 4 7\X6 6\X6 6\X7 7 7 7\X7 7 7\X7 7 7\X0 0 0 0\x0 0 0 0 0 0 0 0 0 0 0 7\X6 6 6 6 6\X6 6 6 6\X6 6 6 6 6 6 6\X8 8 8 8 8 8 8\x8 8 8 8 8 8 8 8 8 8 8 8\x0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\x0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\x0 0 0 0 0 0 0 0 0 0 0 0\x0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0“\x00\x00\x00”) 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 TypeError:“str”不支持缓冲区接口 >>>(b)4 4 4 7\X6 6 6 6 6 7 7 7 8 8 8 8 8 8 3 3 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \x0 0 0 0 0 0 0 0 0 0 0 0 0 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8文件文件文件文件文件文件8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 x00\x00\x00\x00“) 64 >>>
请尝试发布完整的错误消息,并在询问其他人之前尝试自己调试程序。也包括您的调试工作。您的整个问题可以最小化为简单的
open()
,然后是第69行的
write()
。您可能正在尝试在Python 3中运行Python 2代码。