写一个“字符串"作为原始二进制文件放入文件 Python
问题描述
我正在尝试编写一系列用于测试的文件,这些文件是我从头开始构建的.数据有效负载构建器的输出是字符串类型,我正在努力将字符串直接写入文件.
I'm trying to write a series of files for testing that I am building from scratch. The output of the data payload builder is of type string, and I'm struggling to get the string written directly to the file.
有效负载构建器仅使用十六进制值,并且只是为每次迭代添加一个字节.
The payload builder only uses hex values, and simply adds a byte for each iteration.
我尝试过的所有'write'函数都不是写字符串,就是写字符串的ASCII码,而不是字符串本身......
The 'write' functions I have tried all either fall over the writing of strings, or write the ASCII code for the string, rather than the string its self...
我想以一系列文件结束 - 与数据负载具有相同的文件名(例如,文件 ff.txt 包含字节 0xff
I want to end up with a series of files - with the same filename as the data payload (e.g. file ff.txt contains the byte 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:UsersmeDesktopoutput\"
counter = 0
iterator = 100
while counter < iterator:
counter = doFilenameMaker(counter)
dataPayload, fileName = doMakeData(counter)
print type(dataPayload)
saveFile(dataPayload, fileName)
解决方案
要只写入一个字节,请使用 chr(n)
获取包含整数 n
的字节.
To write just a byte, use chr(n)
to get a byte containing integer n
.
您的代码可以简化为:
import os
path = r'C:UsersmeDesktopoutput'
for counter in xrange(100):
with open(os.path.join(path,'{:02x}.txt'.format(counter)),'wb') as f:
f.write(chr(counter))
注意路径使用原始字符串.如果字符串中有 '' 或 ' ' ,它们将被视为回车或换行,而不使用原始字符串.
Note use of raw string for the path. If you had a '' or ' ' in the string they would be treated as a carriage return or linefeed without using a raw string.
f.write
是写入文件的方法.chr(counter)
生成字节.确保也以二进制模式写入 'wb'
.
f.write
is the method to write to a file. chr(counter)
generates the byte. Make sure to write in binary mode 'wb'
as well.
相关文章