python读取十六进制文件,python以16进制打开文件

  python读取十六进制文件,python以16进制打开文件

  本文以Python3以上为学习基础。

  Read、readline和readlines都获取文件的内容。

  三者有什么区别?

  让我们先来看看三个函数的语法格式:

  1、read() fileObject.read([size])

  Size:如果指定了参数size,则按照指定的长度从文件中读取内容;否则,将全文阅读。所有读出的内容都被塞进一个字符串。通常不使用该参数。

  这样好,就是所有东西都在内存里,随时访问更快;也正因为如此,“一条天然的裙子可以打败一条天然的裙子”。如果文件太多,内存就会不堪重负。

  我们来验证一下。

  1.1创建一个不指定参数的文件zxc.txt,内容如下:

  阅读下面的文件:

  显然,我们犯了以下错误:

  UnicodeDecodeError错误:“gbk”编解码器无法解码位置75处的字节0x82:

  不完整多字节序列

  主要原因是编码问题。可能是gbk编码中0x82字节没有这个字符。可能是原字符是两个字节,用gbk解析成一个字节,导致字符不存在。有两种解决方案,一种是二进制读取,另一种是自适应编码:

  二进制读取

  这就是为什么我们有二进制文件打开方法。

  下面我们来验证一下。

  如您所见,二进制文件读出了文件的内容。gbk里没有句号是中文的。

  虽然通常不使用参数的用法,但是我们来看看下面指定的参数:

  1.2指定参数文件的内容:

  指定以下参数来打开文件:

  可以看到,以固定的方式读取四个字节,得到前四个字节:这个。

  2、readline()file object . readline(size)

  Size:如果指定了参数size,则按照指定的要读取的字节数从文件中读取内容,否则一次读取一行。所有读出的内容都被塞进一个字符串。通常不使用

  readline()方法一次读取一行,并返回保存当前行内存的string对象。

  我们来验证一下。

  首先,这是一样的,当没有参数时:

  2.1如果没有指定参数,该文件的内容如下:

  让我们使用readline来读取文件的内容。

  这次为了避免看的麻烦,把文件中的中文句号去掉了,我们直接用读模式r打开就可以了。

  你可以看到所有的第一句台词都出来了。

  实际上,每次操作tmp.readline()时,都会读取一行,指针下移一行。因此,如果我们使用循环或迭代来阅读全文。

  让我们来看看:

  内容还是一样的:

  下面的loop语句和readline函数用于循环读取文件的内容。

  结果很明显,循环读取每行内容,读出整个文件的内容。

  这里说一个题外话:

  注意:在python中, \n 表示换行符,这也是UNIX系统中的规范。但是,在奇妙的窗口中, \r\n 用于表示换行符。蟒蛇是永恒的神。当python处理这种情况时,它会自动将“\r\n”转换为“\n”。很简单我们试试看:

  我目前的运行环境是:Windows S10,Anaconda3,Python3.5

  让我们用二进制打开文件:文件内容:

  我们用readline函数读取一行,打开方式是二进制只读。

  如您所见,文件的最后一个换行符是:\r\n

  同样,通常不使用参数,但是让我们尝试使用参数的场合:

  2.2关于指定参数就不多说了,只举个例子。文件内容:

  我们使用readline函数,指定参数,并读取文件:

  如您所见,返回的结果是:1 This(1和this之间有两个空格)

  3、readlines()file object . readlines()

  我们可以看到readlines函数没有参数。

  readlines()方法用于读取所有行(直到终止符EOF)和返回列表。它以行为单位返回一个列表,也就是相当于执行readline()得到每一行,然后把这一行的字符串作为列表中的一个元素塞进一个列表,最后返回这个列表。

  Python的for… in …结构可以处理这个列表。

  如果遇到终止符EOF,则返回一个空字符串。

  事不宜迟,我们试试吧:文件内容:

  使用readlines函数读取感兴趣的内容,我们打印读取的变量类型:

  如你所见,最后一个缺点被放在列表中。

  列表中的每个元素都是每行的内容,甚至末尾的换行符也存在。

  因为它是一个列表,所以可以使用for循环遍历。

  以下是for循环的结果:

  让我们总结一下三个读函数:

  4.总结函数是否有参数,返回值read Yes,size:指定读取长度。读取结果返回到字符串并存储在内存中。Readline has,size:指定读取长度。在行单元返回字符串,也就是每读一行readlines就没有返回列表。每个列表元素都是一行内容,包括最后一个换行符。5.读取一个非常大的文件。如果文件太大,就不能用read()或readlines()把所有内容一次性读入内存,否则内存就撑不住了。

  但是您可以使用while循环和readline()来完成这项任务。一行一行的读。

  还有一个办法:fileinput模块

  稍后将解释该模块。

  我们直接看用法,一目了然:

  该文件的内容如下。我们假设文件很大,模拟一下。

  使用fileinput模块读取文件:

  我更喜欢这个。它简洁明了,而且它还用于。

  其实还有一个更常用的:

  这是可能的,因为file是一种迭代数据类型,所以可以用for直接迭代。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: