如何在Python中确定“word”的大小

6

我需要知道Python中“word”所占用的字节数。我需要这个信息是因为我需要从文件中读取指定数量的单词;如果我知道一个单词占用的字节数,我就可以使用 file.read(num_bytes) 函数来从文件中读取适当数量的单词。

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


6
请问您是指“word”这个词的内存单元还是语言学概念?“word”的定义是什么? - Rafe Kettler
我没有具体说明。我的意思是内存单位,在Python中似乎未定义,正如@TokenMacGuy所述。 - jlconlin
4
字长的大小应当由文件格式决定,而不是由Python来确定。你应该查看创建该文件的应用程序。 - Mark Ransom
@Jeremy TokenMacGuy 是正确的,Python 中没有标准词。不同的文件/平台会有不同的行为。 - Rafe Kettler
然而,有一个明确定义的“地址大小”概念,被接受的答案所报告,但可能与文件中可以找到的数据毫无关系(除非在具有sysfs/procfs的Linux系统上的/sys或/proc中暴露二进制地址值)。 - SingleNegationElimination
6个回答

9
您可以使用 platform.architecture 函数:
>>> import platform
>>> platform.architecture()
('64bit', '')

请注意同一页上的注释:

Note On Mac OS X (and perhaps other platforms), executable files may be universal files containing multiple architectures. To get at the “64-bitness” of the current interpreter, it is more reliable to query the sys.maxsize attribute:

is_64bits = sys.maxsize > 2**32
请记住,这是Python解释器编译时的字长。如果Python以32位模式编译,则在64位主机上可能会得到32的值。
如果文件由不同的可执行文件生成,并且您可以访问此可执行文件,则可以使用platform.architecture函数的第一个可选参数:
>>> p.architecture('/path/to/executable')
('32bit', '')

1

Python 中没有“单词”这个概念,当你从文件中读取二进制数据时,可以明确指定每次应该读取多少字节。

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


0
也许以下内容会有所帮助:假设您正在检查32位。请查看(-1)<<31是否返回为长整型。对于32位,它不是,而(-1)<<32和1<<31则是。

0
我需要知道Python中“word”的字节数。我需要这个是因为我有需要从文件中读取的单词数。
然后您需要询问编写文件的人。这与Python无关,一切都与实际文件格式有关。文件被定义为单词序列非常奇怪。它很可能是16位或32位整数序列,否则它真的是文本意义上的单词,在这种情况下,您正在扫描文件以查找限定符之间的标记。

0

对于“字(word)”的定义并没有一个确切的标准;除了某些体系结构将一些字节称为“字”(例如x86将2个字节称为一个字,PPC将4个字节称为一个字),但是除了这个任意值之外,并没有太多的意义。

也许最简单的解决方案是使用struct模块;例如,格式'h'表示有符号短整型(与英特尔“字”的定义相当)。因此,您可以这样做:

>>> import struct
>>> f = file('.vimrc')
>>> struct.unpack('h', f.read(struct.calcsize('h')))
(8226,)
>>> 

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接