我正在尝试编写一系列用于测试的文件,我正在从头开始构建。数据有效负载构建器的输出是字符串类型,我很难将字符串直接写入文件。
有效内容构建器仅使用十六进制值,并且只为每次迭代添加一个字节。
我尝试过的'write'函数或者都是字符串的写法,或者是字符串的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)
答案 0 :(得分:4)
要只写一个字节,请使用chr(n)
获取包含整数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'
编写。
答案 1 :(得分:1)
dataPayload.write(f) # this fails "AttributeError: 'str' object has no attribute 'write'
当然可以。你不写字符串;你写文件:
f.write(dataPayload)
也就是说,write()
是文件对象的方法,而不是字符串对象的方法。
你在上面的注释掉的代码中得到了这个权利;不知道为什么你在这里转换它...