在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
将它们读回。