1

我正在尝试编写一系列用于测试的文件,这些文件是我从头开始构建的。数据负载构建器的输出是字符串类型,我正在努力将字符串直接写入文件。

有效负载构建器仅使用十六进制值,并且只是为每次迭代添加一个字节。

我尝试过的“写入”函数要么落在字符串的写入上,要么为字符串编写 ASCII 码,而不是字符串本身......

我想以一系列文件结束 - 文件名与数据有效负载相同(例如文件 ff.txt 包含字节 0xff

def doMakeData(counter):
    dataPayload = "%X" %counter
    if len(dataPayload)%2==1:
        dataPayload = str('0') + str(dataPayload)
    fileName = path+str(dataPayload)+".txt"
    return dataPayload, fileName

def doFilenameMaker(counter):
    counter += 1
    return counter

def saveFile(dataPayload, fileName):
    # with open(fileName, "w") as text_file:
          # text_file.write("%s"%dataPayload)  #this just writes the ASCII for the string
    f = file(fileName, 'wb')
    dataPayload.write(f) #this also writes the ASCII for the string
    f.close()
    return

if __name__ == "__main__":
    path = "C:\Users\me\Desktop\output\\"
    counter = 0
    iterator = 100
    while counter < iterator:
        counter = doFilenameMaker(counter)
        dataPayload, fileName = doMakeData(counter)
        print type(dataPayload)
        saveFile(dataPayload, fileName)
4

2 回答 2

4

要仅写入一个字节,请使用chr(n)获取包含 integer 的字节n

您的代码可以简化为:

import os
path = r'C:\Users\me\Desktop\output'
for counter in xrange(100):
    with open(os.path.join(path,'{:02x}.txt'.format(counter)),'wb') as f:
        f.write(chr(counter))

注意路径使用原始字符串。如果字符串中有 '\r' 或 '\n' ,它们将被视为回车或换行,而不使用原始字符串。

f.write是写入文件的方法。 chr(counter)生成字节。确保也以二进制模式写入'wb'

于 2012-08-19T05:31:01.540 回答
1
dataPayload.write(f) # this fails "AttributeError: 'str' object has no attribute 'write'

当然可以。你不写字符串;你写入文件:

f.write(dataPayload)

也就是说,write()是文件对象的方法,而不是字符串对象的方法。

你在它上面的注释掉的代码中是正确的;不知道你为什么在这里切换它......

于 2012-08-19T05:10:34.980 回答