GVKun编程网logo

在Python中从二进制文件读取整数(在python中从二进制文件读取整数的方法)

10

本文的目的是介绍在Python中从二进制文件读取整数的详细情况,特别关注在python中从二进制文件读取整数的方法的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解在P

本文的目的是介绍在Python中从二进制文件读取整数的详细情况,特别关注在python中从二进制文件读取整数的方法的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解在Python中从二进制文件读取整数的机会,同时也不会遗漏关于Python zipfile从二进制文件中删除执行权限、Python – 从二进制文件中读取10位整数、Python 二进制文件读取显示、python 读取''.bit''二进制文件的知识。

本文目录一览:

在Python中从二进制文件读取整数(在python中从二进制文件读取整数的方法)

在Python中从二进制文件读取整数(在python中从二进制文件读取整数的方法)

我正在尝试在Python中读取BMP文件。我知道前两个字节表示BMP公司。接下来的4个字节是文件大小。当我执行时:

fin = open("hi.bmp", "rb")firm = fin.read(2)  file_size = int(fin.read(4))

我得到:

ValueError:以10为底的int()的无效文字:’F#\ x13’

我想做的是将这四个字节读取为整数,但是Python似乎将它们读取为字符并返回一个字符串,该字符串无法转换为整数。如何正确执行此操作?

答案1

小编典典

read方法将字节序列作为字符串返回。要将字符串字节序列转换为二进制数据,请使用内置struct模块:http
:
//docs.python.org/library/struct.html。

import structprint(struct.unpack(''i'', fin.read(4)))

请注意,unpack始终返回一个元组,因此struct.unpack(''i'', fin.read(4))[0]给出您要使用的整数值。

您可能应该使用格式字符串''<i''(<是修饰符,用于指示小尾数字节顺序,标准大小和对齐方式-
默认是使用平台的字节顺序,大小和对齐方式)。根据BMP格式规范,字节应以Intel / little-endian字节顺序写入。

Python zipfile从二进制文件中删除执行权限

Python zipfile从二进制文件中删除执行权限

不确定为什么会发生这种情况,但是当我在命令行中运行解压缩文件(例如apache-groovy-binary-2.4.7.zip)时……

>目录是rwx-r-xr-x
>文件是rwxr-xr-x或rw-r – r–

但是当我从同一文件上的Python 2.7脚本运行zipfile.extractall()时……

>目录是rwx-r-x —
>文件都是rw-r —- – 甚至是那些应该是可执行文件的文件.

我的umask设置是0027-这部分解释了发生了什么,但为什么可执行位从所有文件中删除?

让Python在命令行版本中采用类似行为的最简单的解决方法是什么(当然,除了炮轰外!)?

解决方法

原因可以在zipfile.py中的_extract_member()方法中找到,它只调用shutil.copyfileobj(),它将在没有任何执行位的情况下写入输出文件.

解决这个问题的最简单方法是通过继承ZipFile并更改extract()(或在扩展版本中修补.默认情况下它是:

def extract(self,member,path=None,pwd=None):
    """Extract a member from the archive to the current working directory,using its full name. Its file information is extracted as accurately
       as possible. `member' may be a filename or a ZipInfo object. You can
       specify a different directory using `path'.
    """
    if not isinstance(member,ZipInfo):
        member = self.getinfo(member)

    if path is None:
        path = os.getcwd()

    return self._extract_member(member,path,pwd)

应该更改最后一行以实际根据原始属性设置模式.你可以这样做:

import os
from zipfile import ZipFile,ZipInfo

class MyZipFile(ZipFile):

    def extract(self,pwd=None):
        if not isinstance(member,ZipInfo):
            member = self.getinfo(member)

        if path is None:
            path = os.getcwd()

        ret_val = self._extract_member(member,pwd)
        attr = member.external_attr >> 16
        os.chmod(ret_val,attr)
        return ret_val


with MyZipFile('test.zip') as zfp:
    zfp.extractall()

(以上是基于Python 3.5并假设zipfile名为test.zip)

Python – 从二进制文件中读取10位整数

Python – 从二进制文件中读取10位整数

我有一个包含10位整数流的二进制文件.我想读它并将值存储在列表中.

它使用以下代码,它读取my_file并使用整数值填充像素:

file = open("my_file","rb")

pixels = []
new10bitsByte = ""

try:
    byte = file.read(1)
    while byte:
        bits = bin(ord(byte))[2:].rjust(8,'0')
        for bit in reversed(bits):
            new10bitsByte += bit
            if len(new10bitsByte) == 10:
                pixels.append(int(new10bitsByte[::-1],2))
                new10bitsByte = ""             
    byte = file.read(1)

finally:
    file.close()

将字节读入位并将其读回“10位”字节似乎并不优雅.有没有更好的方法呢?

对于8位或16位整数,我可以使用file.read(size)并将结果直接转换为int.但是在这里,因为每个值都存储在1.25字节中,我需要像file.read(1.25)这样的东西…

最佳答案
这是一个在不使用文本字符串转换的情况下执行位操作的生成器.希望它更有效率.

总结

以上是小编为你收集整理的Python – 从二进制文件中读取10位整数全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

Python 二进制文件读取显示

Python 二进制文件读取显示

[python]  view plain  copy
  1. filename=raw_input('enter file name:')  
  2. f=open(filename,'rb')  
  3. f.seek(0,0)  
  4. index=0  
  5. for i in range(0,16):  
  6.     print "%3s" % hex(i) ,  
  7. print  
  8. ottom:none; border-left:3px solid rgb(108,16):  
  9. "%-3s" % "#" ,  
  10. print  
  11. while True:  
  12.     temp=f.read(1)  
  13. if len(temp) == 0:  
  14.         break  
  15. else:  
  16. "%3s" % temp.encode('hex'),0); background-color:inherit">        index=index+1  
  17. if index == 16:  
  18.         index=0  
  19. print   
  20. f.close()  
这里显示的是,读取一个BMP图像后的效果

  

 

从这里,可以看出,print语句和C的printf对格式要求是一致的,或者说,Python采用了C的格式规范。

print "%-3s" % "#",


每次读一个字节。如果读出来的长度为0,则到了文件末尾。

python 读取''.bit''二进制文件

python 读取''.bit''二进制文件

请问,我想读取一个''.bit''二进制文件,用open(''路径'',''rb'')然后进行读取,在IDLE里测试发现,读取出的数据为

\x00\t\x0f\xf0\x0f\xf0\x0f\xf0\x0f\xf0\x00\x00\x01

但是我用UE打开这个''.bit''文件后,发现数据时是

00 09 0F F0 0F F0 0F F0 0F F0 00 00 01

为什么第二位的''09''用rb读取后会变成''\t''

或者怎么能正确读取这个二进制文件?

今天关于在Python中从二进制文件读取整数在python中从二进制文件读取整数的方法的讲解已经结束,谢谢您的阅读,如果想了解更多关于Python zipfile从二进制文件中删除执行权限、Python – 从二进制文件中读取10位整数、Python 二进制文件读取显示、python 读取''.bit''二进制文件的相关知识,请在本站搜索。

本文标签:

上一篇在Python中使用静态方法的优点是什么?(python静态方法有什么用)

下一篇为什么元组比Python中的列表快?(python元组和列表的异同)