我需要知道 Python 中“单词”中的字节数。我需要这个的原因是我需要从文件中读取的字数;如果我知道一个单词的字节数,我可以使用该file.read(num_bytes)
函数从文件中读取适当的字节数。
如何确定一个单词中的字节数?
您可以使用以下platform.architecture
功能:
>>> import platform
>>> platform.architecture()
('64bit', '')
注意同一页上的注释:
注意在 Mac OS X(可能还有其他平台)上,可执行文件可能是包含多个体系结构的通用文件。要获取当前解释器的“64 位”,查询 sys.maxsize 属性更可靠:
is_64bits = sys.maxsize > 2**32
请记住,这给出了编译 python 解释器的字长。如果在 32 位模式下编译 python,您可以在 64 位主机上获得 32 的值。
如果文件是由不同的可执行文件生成的,并且您可以访问此可执行文件,则可以使用该platform.architecture
函数的第一个可选参数:
>>> p.architecture('/path/to/executable')
('32bit', '')
Python 中没有“字”的概念,当您从文件中读取二进制数据时,您可以明确说明一次应读取多少字节。
就编译器和/或平台而言,“WORD”通常确定基本数据单元的大小。而Python独立于那种东西:)
像这样的东西怎么样:
def machine_word_size():
import sys
num_bytes = 0
maxint = sys.maxint
while maxint > 0:
maxint = maxint >> 8
num_bytes += 1
return num_bytes
我需要知道 Python 中“单词”中的字节数。我需要这个的原因是我有我需要从文件中读取的字数
然后你需要问写文件的人。它与 Python 无关,与实际文件格式有关。顺便说一句,将文件定义为单词序列是很奇怪的。它很可能是一个 16 位或 32 位整数的序列,或者它确实是文本意义上的单词,在这种情况下,您实际上是在扫描文件以查找分隔符之间的标记。
单词是什么并没有真正合理的定义。除了某些架构将某些字节数称为“单词”(x86 调用 2 个字节一个单词,PPC 调用 4 个字节一个单词),但除了这个任意值之外没有太大意义。
也许最简单的解决方案是只遵循struct
模块;例如,格式'h'
意味着有符号短(这与英特尔对“单词”的定义合理地一致)。所以你可以这样做:
>>> import struct
>>> f = file('.vimrc')
>>> struct.unpack('h', f.read(struct.calcsize('h')))
(8226,)
>>>
也许以下内容可能是相关且有用的:假设您检查 32 位。看看 (-1)<<31 是否返回。对于 32 位,它不会,而 (-1)<<32 和 1<<31 会。