4

我需要知道 Python 中“单词”中的字节数。我需要这个的原因是我需要从文件中读取的字数;如果我知道一个单词的字节数,我可以使用该file.read(num_bytes)函数从文件中读取适当的字节数。

如何确定一个单词中的字节数?

4

6 回答 6

7

您可以使用以下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', '')
于 2011-08-02T20:40:22.333 回答
1

Python 中没有“字”的概念,当您从文件中读取二进制数据时,您可以明确说明一次应读取多少字节。

就编译器和/或平台而言,“WORD”通常确定基本数据单元的大小。而Python独立于那种东西:)

于 2011-08-02T20:44:02.983 回答
0

像这样的东西怎么样:

def machine_word_size():
    import sys
    num_bytes = 0
    maxint = sys.maxint
    while maxint > 0:
        maxint = maxint >> 8
        num_bytes += 1
    return num_bytes
于 2013-04-17T06:58:07.127 回答
0

我需要知道 Python 中“单词”中的字节数。我需要这个的原因是我有我需要从文件中读取的字数

然后你需要问写文件的人。它与 Python 无关,与实际文件格式有关。顺便说一句,将文件定义为单词序列是很奇怪的。它很可能是一个 16 位或 32 位整数的序列,或者它确实是文本意义上的单词,在这种情况下,您实际上是在扫描文件以查找分隔符之间的标记。

于 2011-08-03T00:03:14.563 回答
0

单词是什么并没有真正合理的定义。除了某些架构将某些字节数称为“单词”(x86 调用 2 个字节一个单词,PPC 调用 4 个字节一个单词),但除了这个任意值之外没有太大意义。

也许最简单的解决方案是只遵循struct模块;例如,格式'h'意味着有符号短(这与英特尔对“单词”的定义合理地一致)。所以你可以这样做:

>>> import struct
>>> f = file('.vimrc')
>>> struct.unpack('h', f.read(struct.calcsize('h')))
(8226,)
>>> 
于 2011-08-02T20:45:21.237 回答
0

也许以下内容可能是相关且有用的:假设您检查 32 位。看看 (-1)<<31 是否返回。对于 32 位,它不会,而 (-1)<<32 和 1<<31 会。

于 2017-05-21T22:51:06.857 回答