Python读取二进制文件实际项目中经常遇到读取二进制问题python中的读入函数 , Python下读取二进制文件一般用Python的文件打开读写相关函数和struct.
1 。获取文件名filenamepython中的读入函数,可用对话框,也可以直接手写
2 。打开文件,这里中是打开 , 像看书一样,只是打开书,还没有看里面的内容 , 可以看,也可以不看
binFile=open(filename,'rb')
3 。那就看看吧,binFile现在就是书的名字了 。这里python中的读入函数我们读入4个字,如果read()将读入整个文件
context=binFile.read(4)
4 。读入之后问题来了,context包含四个字(4Bytes),但这四个字是加密的(二进制) 。这时要找翻译struct.unpack
realContext=struct.unpack(format,context)
5 。format的就是加密规则了,由1 , 2,4,8个字节组成其python中的读入函数他类型 , 或者其他类型的数组 。
a,b,c,d=struct.unpack('4c',context)
读入四个字符
对应格式参考
6 。打开文件后用完一定要关闭,和看书一个样 , 看完后要合上,不合上后果自己去想
binFile.close()
7 。查找内容,文件内容可以一个一个字的按顺序读出,但如果已经知道内容在什么位置,可以用查找方式读出 。
binFile.seek(100)
context=binFile.read(4)
读出100位置后面的4个字,(101,102,103 , 104)
8 。Python还提供也一些高级读写功能,如整行读取等
python读取txt时被修改有少量数据存在txt文件中 , 如何进行读取、写入和修改呢,今天小编就分享下:
python常用的读取文件函数有三种read()、readline()、readlines()
【python中的读入函数 python读取函数】1、read() : 一次性读取所有文本
with open("1.txt", "r", encoding='utf-8') as f:#打开文本
data = https://www.04ip.com/post/f.read()#读取文本
print(data)
2、readline() : 读取行的内容
with open('1.txt', 'r', encoding='utf-8') as f:
data = https://www.04ip.com/post/f.readline()
print(data)
3、readlines():读取全部内容,以数列的格式返回结果,可以配合for循环使用 。
with open('1.txt', 'r', encoding='utf-8') as f:
data = https://www.04ip.com/post/f.readlines()
print(data)
image.png
with open('1.txt', 'r', encoding='utf-8') as f:
for i in f.readlines():
i = ann.strip('\n')#去除文本中的换行符
print(i)
4、with open()写法与open()的区别
1666058828369926.png
image.png
open()完成后必须调用close()方法关闭文件,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件
数量也是有限的,由于文件读写时都有可能产生IOError,一旦出错,后面的f.close()就不会调用 。with open()则可以避免这样的情况 。
5、python文件读写模式
r : 读取文件,若文件不存在则会报错
w: 写入文件,若文件不存在则会先创建再写入 , 会覆盖原文件
a : 写入文件 , 若文件不存在则会先创建再写入,但不会覆盖原文件 , 而是追加在文件末尾
r: 可读、可写,文件不存在也会报错,写操作时会覆盖
w: 可读 , 可写,文件不存在先创建,会覆盖
a: 可读、可写,文件不存在先创建,不会覆盖,追加在末尾
rb:以二进制方式打开,只能读取文件 。如果文件不存在 , 会发生异常
wb:以二进制方式打开,只能写入文件 。如果文件不存在 , 创建该文件; 如果文件存在,会清空,在打开(覆盖)
rt:以文本读方式打开,只能读文件 。不存在报错
wt:以文本写方式打开 , 只能写文件 。不存在创建;存在覆盖
rb :以二进制方式打开,可读、写文件 。如果文件不存在,会发生异常
wb :以二进制方式打开,可读、写文件 。如果文件不存在,创建该文件;如果文件存在 , 会清空,在打开(覆盖)
python中isread函数么文件对象(open() 函数的返回值)提供了read()函数可以按字节或字符读取文件内容,到底是读取字节还是字符,取决于使用 open() 函数打开文件时,是否使用了 b 模式,如果使用了 b 模式,则每次读取一个字节;反之,则每次读取一个字符 。
read() 函数的基本语法格式如下:
file.read([size])
其中 , file 表示打开的文件对象;size 作为一个可选参数 , 用于指定要读取的字符个数,如果省略,则默认一次性读取所有内容 。
【例 1】采用循环读取整个文件的内容 。
# a.txt 文件内容为:C语言中文网
f = open("a.txt", 'r', True)
while True:
# 每次读取一个字符
ch = f.read(1)
# 如果没有读到数据,跳出循环
if not ch:
break
# 输出ch
print(ch, end='')
f.close()
运行结果为:
C语言中文网
上面程序采用循环依次读取每一个字符(因为程序没有使用 b 模式),每读取到一个字符,程序就输出该字符 。
正如从上面程序所看到的,当程序读写完文件之后,推荐立即调用 close() 方法来关闭文件 , 这样可以避免资源泄露(后续章节会详细介绍 close() 函数) 。
注意 , 在调用 read() 函数读取文件内容时 , 成功读取的前提是在 open() 函数中使用 r 或 r的模式打开文件 , 否则(比如将上面程序中 open()的打开模式改为 w),程序会抛出io.UnsupportedOperation异常:
Traceback (most recent call last):
File "C:\Users\mengma\Desktop\demo.py", line 4, in
ch = f.read(1)
io.UnsupportedOperation: not readable
【例 2】调用 read() 方法时不传入参数,该方法默认会读取全部文件内容 。例如:
f = open("a.txt", 'r', True)
# 直接读取全部文件
print(f.read())
f.close()
运行结果为:
C语言中文网
read()函数抛出UnicodeDecodeError异常的解决方法
当使用 open() 函数打开文本文件时,默认会使用当前操作系统的字符集,比如 Windows 平台,open() 函数默认使用 GBK 字符集 。因此,上面程序读取的 a.txt 也必须使用 GBK 字符集保存;否则,程序就会出现UnicodeDecodeError错误 。
如果要读取的文件所使用的字符集和当前操作系统的字符集不匹配,则有两种解决方式:
使用二进制模式读取,然后用 bytes 的 decode() 方法恢复成字符串 。
利用 codecs 模块的 open() 函数来打开文件,该函数在打开文件时允许指定字符集 。
例如,下面程序使用二进制模式来读取文本文件:
# 指定使用二进制方式读取文件内容 , a.txt 以 utf-8 编码存储
f = open("a.txt", 'rb', True)
# 直接读取全部文件,并调用bytes的decode将字节内容恢复成字符串
print(f.read().decode('utf-8'))
f.close()
上面程序在调用 open() 函数时,传入了 rb 模式,这表明采用二进制模式读取文件,此时文件对象的 read() 方法返回的是 bytes 对象 , 程序可调用 bytes 对象的 decode() 方法将它恢复成字符串 。由于此时读取的 a.txt 文件是以 UTF-8 的格式保存的,因此程序需要使用 decode() 方法恢复字符串时显式指定使用 UTF-8 字符集 。
下面程序使用 codes 模块的 open() 函数来打开文件,此时可以显式指定字符集:
import codecs
# 指定使用utf-8 字符集读取文件内容
f = codecs.open("a.txt", 'r', 'utf-8', buffering=True)
while True:
# 每次读取一个字符
ch = f.read(1)
# 如果没有读取到数据,则跳出循环
if not ch : break
# 输出ch
print (ch, end='')
f.close()
上面程序在调用 open() 函数时显式指定使用 UTF-8 字符集,这样程序在读取文件内容时就完全没有问题了 。
Python中的input()、isinstance()函数如何使用Python解释器内置了许多函数,这意味着我们无需定义,始终可以它们 。接下来和大家一起讨论一个常用的内建函数-input()和isinstance() 。
input()
input()函数读取用户输入,并转换成字符串:
a = input()# 将input()返回的值赋值给a
Python
a# 查看a的值(为字符串'Python')
'Python'
input()函数可以提供一个参数,用来提示用户:
b = input('请输入你最喜欢的水果:')# 给用户必要的提示
请输入你最喜欢的水果:香蕉
b
'香蕉'
需要注意的是,input()函数返回的值总是字符串 , 当用户输入的是数字也是这样,所以当使用它时一定要注意:
num = input('请输入一个数字: ')
请输入一个数字: 10
num9# 试图把num和数字相加
Traceback (most recent call last):
File "", line 1, in
TypeError: must be str, not int
num
'10'
type(num)# 查看num的数字类型
class 'str'
isinstance()
isinstance()函数用于检查对象是否为指定类(或者说数据类型)的实例 。isintance()的第一个参数为一个对象,第二个参数为要检查的数据类型 。
举个例子,比如有有一个变量,你想检查它是否为数字类型,可以使用isinstance()函数:
score = 90
result = isinstance(score, int)
if result:
...print('score为int数据类型')
... else:
...print('score不为int数据类型')
...
score为int数据类型
除了能检查是否为int类型外 , isintance()还能检查其他数据类型(当然了),下面是一个综合示例:
pi = 3.14
name = 'Wang'
complex_num = 12j
isinstance(pi, float)# 3.14为浮点数类型
True
isinstance(name, str)# 'Wang'为字符串类型
True
isinstance(complex_num, complex)#12j为复数
True
isinstance()还可以验证某个对象是否为自定义的类型:
class Developer:# 定义一个叫做Developer的类
...
...def __init__(self, name):# __init__方法中,需要输入名字
...self.name = name
...def display(self):# 定义了display()方法
...print("Developer:", self.name, "-")
...
class PythonDeveloper(Developer):# PythonDeveloper类,继承了Developer类
...
...def __init__(self, name, language):
...self.name = name
...self.language = language
...
...def display(self):# 覆盖了父类的display方法
...print("Python Developer:", self.name, "language:", self.language, "-")
...
dev = Developer('Zhang')# 创建一个Developer对象
dev.display()# 调用display()方法 , 以查看该对象
Developer: Zhang -
isinstance(dev, Developer)# 判断dev是否为Developer类,答案是肯定的
True
isinstance(dev, PythonDeveloper)# 判断dev是否为PythonDeveloper类,当然不是
False
python_dev = PythonDeveloper('Liu', 'Python')# 创建一个PythonDeveloper对象,注意PythonDeveloper是Developer的子类
python_dev.display()# 调用display方法
Python Developer: Liu language: Python -
isinstance(python_dev, Developer)# 判断python_dev是否为Developer类,答案是肯定的
True
isinstance(python_dev, PythonDeveloper)# 判断python是否为PythonDeveloper类 , 答案也是肯定的
True
关于Python的基础问题可以看下这个网页的视频教程,网页链接,希望我的回答能帮到你 。
关于python中的读入函数和python读取函数的介绍到此就结束了 , 不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。
推荐阅读
- 汽车电池怎么连接电脑的,汽车电瓶怎么连
- html5产品3d旋转,h5图片3d旋转
- 用虚拟机做服务器,用虚拟机做服务器可以吗
- 华为面试手撕代码java 华为面试手撕代码难吗
- 关注我视频号的怎么加好友,微信视频号怎么关注关注我的人
- 虚拟机逃逸漏洞分析,esxi虚拟机逃逸
- 经营大城市类的游戏,经营大城市类的游戏叫什么
- java调色板的代码 java如何调颜色
- 妈妈妈电视吃什么,妈妈在吃啥