
正文
python中的读入函数 python读取函数
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
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还提供也一些高级读写功能,如整行读取等
相关问答
Q1: python读取txt时被修改
有少量数据存在txt文件中,如何进行读取、写入和修改呢,今天小编就分享下:
python常用的读取文件函数有三种read()、readline()、readlines()
1、read() : 一次性读取所有文本
with open("1.txt", "r", encoding='utf-8') as f: #打开文本
data = f.read() #读取文本
print(data)
2、readline() : 读取行的内容
with open('1.txt', 'r', encoding='utf-8') as f:
data = f.readline()
print(data)
3、readlines():读取全部内容,以数列的格式返回结果,可以配合for循环使用。
with open('1.txt', 'r', encoding='utf-8') as f:
data = 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+:以二进制方式打开,可读、写文件。如果文件不存在,创建该文件;如果文件存在,会清空,在打开(覆盖)
Q2: 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 字符集,这样程序在读取文件内容时就完全没有问题了。
Q3: 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
num + 9 # 试图把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 = 1 + 2j
isinstance(pi, float) # 3.14为浮点数类型
True
isinstance(name, str) # 'Wang'为字符串类型
True
isinstance(complex_num, complex) # 1 + 2j为复数
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读取函数的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。






