2024-06-06 14:02:17 发布
网友
我的问题很简单:
有没有办法用pythonic的方式编写bash命令?
hexdump -e '2/1 "%02x"' file.dat
显然,不使用操作系统、popen或任何快捷方式;)
编辑:虽然我没有显式地指定,但是如果代码在Python3.x中起作用,那就太好了
谢谢!
只需^{}整个文件和^{}。还有什么更像是Python?
with open('file.dat', 'rb') as f: hex_content = f.read().encode('hex')
如果您只关心Python 2.x,^{}将把二进制数据块编码为十六进制。所以:
with open('file.dat', 'rb') as f: for chunk in iter(lambda: f.read(32), b''): print chunk.encode('hex')
(IIRC,hexdump默认情况下,每行打印32对十六进制;如果不是,只需将32更改为16或其他值……。
hexdump
32
16
如果两个参数{a2}看起来令人费解,请单击“帮助”链接;一旦你有了这个想法,它就不会太复杂了。
如果您关心Python 3.x,^{}只适用于将Unicode字符串转换为字节的编解码器;任何将Unicode字符串转换为字节的编解码器(或任何其他组合),则必须使用^{}来显式地执行此操作:
with open('file.dat', 'rb') as f: for chunk in iter(lambda: f.read(32), b''): print(codecs.encode(chunk, 'hex'))
或者最好使用^{}:
with open('file.dat', 'rb') as f: for chunk in iter(lambda: f.read(32), b''): print(binascii.hexlify(chunk))
如果除了打印它们之外还想做些什么,而不是将整个文件读入内存,那么您可能需要创建一个迭代器。你可以把它放在一个函数中,把print改成yield,然后这个函数返回你想要的迭代器。或者使用genexpr或map调用:
print
yield
map
with open('file.dat', 'rb') as f: chunks = iter(lambda: f.read(32), b'') hexlines = map(binascii.hexlify, chunks)
标准图书馆是你的朋友。试试binascii.hexlify()。
只需^{} 整个文件和^{} 。还有什么更像是Python?
如果您只关心Python 2.x,^{} 将把二进制数据块编码为十六进制。所以:
(IIRC,
hexdump
默认情况下,每行打印32对十六进制;如果不是,只需将32
更改为16
或其他值……。如果两个参数{a2}看起来令人费解,请单击“帮助”链接;一旦你有了这个想法,它就不会太复杂了。
如果您关心Python 3.x,^{} 只适用于将Unicode字符串转换为字节的编解码器;任何将Unicode字符串转换为字节的编解码器(或任何其他组合),则必须使用^{} 来显式地执行此操作:
或者最好使用^{} :
如果除了打印它们之外还想做些什么,而不是将整个文件读入内存,那么您可能需要创建一个迭代器。你可以把它放在一个函数中,把
print
改成yield
,然后这个函数返回你想要的迭代器。或者使用genexpr或map
调用:标准图书馆是你的朋友。试试binascii.hexlify()。
相关问题 更多 >
编程相关推荐