在Python中使用struct.unpack从文件中读取整数

在Python中使用struct.unpack从文件中读取整数,python,file-io,struct,Python,File Io,Struct,假设我有一个文件名num.txt,如下所示: 1 2 3 4 5 6 7 8 9 0 我想从这个文件中读取3个整数,即13 我知道struct.unpack可能会奏效,但我就是做不好。 我是这样做的: fp = open('num.txt', 'rb') print struct.unpack('iii', fp.read(12)) #right? 有人能帮我吗 PS 以下是我获取文件num.txt的方式: fp = open('num.txt', 'wb') fp.write('1 2

假设我有一个文件名
num.txt
,如下所示:

1 2 3 4 5
6 7 8 9 0
我想从这个文件中读取
3个整数
,即
13

我知道
struct.unpack
可能会奏效,但我就是做不好。 我是这样做的:

fp = open('num.txt', 'rb')
print struct.unpack('iii', fp.read(12))  #right?
有人能帮我吗

PS

以下是我获取文件num.txt的方式:

fp = open('num.txt', 'wb')
fp.write('1 2 3 4 5\n6 7 8 9 0')
fp.close()

struct
用于数字的C样式二进制表示。如果您有文本表示,那么您应该将它们传递给
int()


struct
用于数字的C样式二进制表示。如果您有文本表示,那么您应该将它们传递给
int()


您不能使用
struct
从文本文件中读取数字。它用于从二进制文件中读取数据,其中第一个字节实际上是
0x01
,而不是字节顺序标记或字符
'1'
的编码值

你只是想

three_ints = [int(x) for x in numfile.readline().strip().split(' ')[:3]]
如果你只对前三个数字感兴趣,或者

all_ints = [[int(x) for x in line.split()] for line in numfile]

如果您想在每一行上都有一个
列表
列表
s的
int
s。

您不需要使用
struct
从文本文件中读取数字。它用于从二进制文件中读取数据,其中第一个字节实际上是
0x01
,而不是字节顺序标记或字符
'1'
的编码值

你只是想

three_ints = [int(x) for x in numfile.readline().strip().split(' ')[:3]]
如果你只对前三个数字感兴趣,或者

all_ints = [[int(x) for x in line.split()] for line in numfile]

如果您希望在每行上都有一个
列表
列表
s的
int
s。

您确定num.txt不是文本文件吗?在进行编辑之前,您是否查看了答案?我们都正确地解释了您的情况--您没有二进制数据,因此您没有使用
struct
。您确定num.txt不是文本文件吗?在进行编辑之前,您是否查看了答案?我们都正确地解释了你的情况——你没有二进制数据,所以你没有使用
struct
。是的,你是对的。但是我如何使用struct来实现呢?这与num.txt文件有关吗?@Alcott:请再次阅读答案。然后是第三次。一直读到“二进制”读入为止。@IgnacioVazquez Abrams,是的,读入了。但是我有点想知道我如何或者可以在num.txt二进制文件中生成这些数字?这根本没有任何意义。如果它是文本,那么它就是文本,应该这样对待。@Alcott当您这样写数字时,文件中的值实际上不是这些数字,而是(很可能)这些字符的ASCII值。因此,如果你用
struct
读回它们,你会得到
1
的ASCII值,然后是空格的ASCII值,然后是
2
的ASCII值。您需要编写类似于
numfile.write(''.join(chr(x)表示[1,2,3,4,5,6,7,8,9,0])的内容)
才能使用
struct
读回它们。是的,您是对的。但是我如何使用struct来实现呢?这与num.txt文件有关吗?@Alcott:请再次阅读答案。然后是第三次。一直读到“二进制”读入为止。@IgnacioVazquez Abrams,是的,读入了。但是我有点想知道我如何或者可以在num.txt二进制文件中生成这些数字?这根本没有任何意义。如果它是文本,那么它就是文本,应该这样对待。@Alcott当您这样写数字时,文件中的值实际上不是这些数字,而是(很可能)这些字符的ASCII值。因此,如果你用
struct
读回它们,你会得到
1
的ASCII值,然后是空格的ASCII值,然后是
2
的ASCII值。您需要编写类似于
numfile.write(''.join(chr(x)表示[1,2,3,4,5,6,7,8,9,0]中的x))
的内容,以便能够使用
struct
将它们读回。