python中io.textio_Python文件读写概述(IO操作、文件读写、stringiobytesio、序列化),python,的,小,总结,StringIOBytesIO...
IO操作
在进行文件的读写之前,需要说明几点。首先,运行的程序和读取的数据都会在内存中缓存。
进入到
程序或数据
内存
其次,用python程序进行文件的读写,需要创建一个小工具–文件流,用来处理数据,读取或写入。文件流就相当于一个管道,管道里流淌着的就是我们需要的数据。没有文件流,是无法对文件进行读写的。
接着要说到IO了,IO指的是输入(input)和输出(output)。输入输出是相对的,比如在python中,我们从文件中获得数据为输入,写入数据至文件中为输出。由于CPU、内存、磁盘处理数据的速度差异较大,就会出现内存中的数据已经被CPU处理好了,但是磁盘仍在慢慢接收这个数据的情况。由于设备性能的问题(这里指读取数据的速率),处理方式分为同步IO和异步IO:
同步IO:CPU等到数据全部写入磁盘后再执行后续代码
异步IO:CPU继续执行后续代码,磁盘慢慢接收剩下的数据
如果使用异步IO,编程性能更好,但是设计起来会比较复杂,大致了解一下就行了。
对文件的读写就是常见的IO操作。python程序从文件中获取数据时,数据就会流向文件流,然后由用户获得;当我们向文件中写入数据时,数据就会经文件流由磁盘接收。
文件读写
读写文件之前,先创建一个文件流,在python中,使用内置函数open()创建文件流,如果没有该文件,会报OSError异常,open()的基本语法为:
f = open("myfile.txt", "r", encoding="utf-8")
注:参考的是
python文档
,encoding会根据本地编码不同有差别
#使用open方法创建文本流
a = open("文件名.txt")
print(a)
#如果文件存在,会看到
可以看到我们得到是_io.TextIOWrapper这个类,这个类有很多的方法,比如读写:read()、write(),这样我们可以使用文件流读写文件了。文件流有各种模式,比如只读r或可读可写w,处理文本数据或者二进制数据等等。
读取文件
只是读取文件中的数据的话,可以用"r",也可以不用,因为在没有明确的说明下,默认是"r"模式,打开文件后,使用read()可以读取文件中的内容
a = open("文件名.txt","r")
data = a.read()
#read()返回的是一个str对象
print(data)
需要的注意是,
如果python文件和被读取的文件在同一个目录下时,open()的第一个参数只给文件名.txt就行了
,但是如果两者不在同一个目录下,就会出现异常,提示该文件找不着
FileNotFoundError: [Errno 2] No such file or directory: '文件名.txt'
这时我们需要给出文件的完整路径
,比如
# r取消转义
a = open(r"C:\Users\Administrator\Desktop\文件名.txt")
读完文件,python会把内容读到内存,获得文件数据后要用close()关闭文件,不然其它程序无法操作该文件,也会占据内存资源。
a.close()
由于读写文件可能出现异常,这样就无法正常关闭文件了。可以使用try…finally完成文件清理工作
try:
a = open("文件名.txt","r")
b = a.read()
print(b)
finally:
a.close()
还可以with语句,自带finally关闭文件的作用
##使用with语句创建文件流,打开文件
with open("文件名.txt") as a: #将文件对象/文件流命名为a
b = a.read()
print(b)
这样即使读写文件时,出现异常,文件也能关闭了。
如果是读文本文件,比如word,txt,excel等等,用模式"r"。如果读取二进制文件,比如图片,视频等等,使用"rb"模式打开文件
with open("文件名.png","rb") as a:
print(a.read()) # read()返回的是bytes对象
写入文件
写入文件,文件流使用的是"w"模式,使用write()函数,write的参数是字符串
with open("文件名.txt","w") as a:
a.write(str)
如果python没有找到该文件,会自动创建一个新文件
"a"模式在末尾追加内容
with open("文件名.txt","a") as a:
a.write(str)
需要注意的是如果忘了关闭文件,会导致数据没有写入。使用close()相当于告诉操作系统把所有的内容写入文件后再关闭
另外,我发现打开一个文件对象后,不能同时进行读、写、追加的操作,而是在不同的模式下,需要多次创建文件对象,完成对应的操作。这个保留。
StringIO & BytesIO
StringIO
读写数据不一定就发生在磁盘中的文件中,也可以发生在内存中,StringIO就是在内存中对字符串进行读写
#读取
from io import StringIO
#可以使用str字符串初始化SStringIO
a = StringIO("在内存中创建\n一个类StringIO的\n实例化对象")
while True:
s = a.readline()
if s == "":
break
print(s)
#output
在内存中创建
一个类StringIO的
实例化对象
#写入
from io import StringIO
a = StringIO()
a.write("1\n")
a.write("2\n")
a.write("3")
print(a.getvalue())
使用getvalue()方法获得写入的str
BytesIO
如果想在内存中读取二进制数据就需要使用BytesIO
#读取
from io import BytesIO
#为读取初始化BytesIO
a = BytesIO(b'\xb6\xfe\xbd\xf8\xd6\xc6')
print(a.read())
#output
b'\xb6\xfe\xbd\xf8\xd6\xc6'
#写入
from io import BytesIO
#为写入二进制内容实例化
a = BytesIO()
a.write("二进制".encode("cp936"))
print(a.getvalue())
#output
b'\xb6\xfe\xbd\xf8\xd6\xc6'
序列化
序列化:将对象以二进制的形式存储在文件中
反序列化:将存储在文件中的对象复原
使用序列化的好处是可以跨平台存储和进行网络传输
#序列化
import pickle
list1 = ["1",1,"nihao"]
#创建一个文件对象,如果文件没有自动创建
f = open("dump.txt","wb")
#使用dump将列表以二进制的形式存储在文件中
d = pickle.dump(list1,f)
f.close()
#反序列化
import pickle
# 从之前序列化的dump.txt文件里边读取内容
f = open('dump.txt', 'rb') # 设定文件选项模式为rb
#使用load反序列化,二进制内容变为列表
d = pickle.load(f)
f.close() # 关闭文件资源
print(d)
#output
['1', 1, 'nihao']
这样我们就将列表从二进制文件读出了
python中io.textio_Python文件读写概述(IO操作、文件读写、stringiobytesio、序列化),python,的,小,总结,StringIOBytesIO...相关推荐
- python常用语法和示例_使用Python中的示例进行输入和输出操作
python常用语法和示例 A Program needs to interact with the user to accomplish the desired task; this is done ...
- python中newfile是干嘛用的_python 文件操作方法
python中对文件.文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块. 得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd() 返回指定目录下的所有文件和目 ...
- python怎么安装打开文件不存在怎么办呢_如果文件不存在,Python中的open()不会创建文件...
16 个答案: 答案 0 :(得分:712) 您应该open使用w+模式: file = open('myfile.dat', 'w+') 答案 1 :(得分:112) 以下方法的优点是,即使在路上引 ...
- python中f点flush是什么函数_Python文件操作及内置函数flush原理解析
1.打开文件得到文件句柄并赋值给一个变量 2.通过句柄对文件进行操作 3.关闭文件 示例文件 '你好呀' 我是于超 嗯 再见 文件操作基本流程 f=open('chenli',encoding='ut ...
- python中数字和字符串可以直接相加_用c语言或者python将文件中特定字符串后面的数字相加...
匿名用户 1级 2014-08-31 回答 代码应该不难吧.既然用爬虫爬下来了,为什么爬取数据的时候没做处理呢. 之前用过Scrapy爬虫框架,挺好用的,你可研究下. 代码: #!coding=utf ...
- python中字典不自动排序/删除指定类型文件/执行可执行文件的返回值
1.python 字典的用法 from collections import OrderedDict dict =OrderedDict() dict['foo']=3 dcit['aol']=1 2 ...
- python中gettext文件格式_如何将gettext .mo文件转换为.po文件 - python
Improve this question 当.po文件不再可用时,有什么方法可以将.mo文件转换为.po文件源?我需要编辑.mo文件的内容,但没有.po文件.可能吗? 参考方案 msgunfmt [ ...
- python中排序英文单词怎么写_Python实现对文件进行单词划分并去重排序操作示例...
本文实例讲述了Python实现对文件进行单词划分并去重排序操作.,具体如下: 文件名:test1.txt 文件内容: But soft what light through yonder window ...
- python中的数据写入与添加数据写入文件(to_csv)
很多情况下,大家可能会遇到相同情况,就是现在有一些数据需要保存在某个文件里面,但是后续会不断更新添加新的数据,例如在爬虫的时候,一页一页爬取数据的时候,当然可以将所有页数据先合并到一起,再保存起来,但 ...
- python中 .py .pyc .pyw .pyo .pyd各后缀文件区别
转载自:https://www.cnblogs.com/deadwood-2016/p/8143351.html .py 文件 以 .py 作扩展名的文件是 Python 源代码文件,由 python ...
最新文章
- 【原创】一种维护型项目升级打包的解决方案
- 百度翻译接口测试(2)
- 关于使用 ./ 执行sh文件报错-bash: ./startup.sh: /bin/sh^M: bad interpreter: No such file or directory
- 计算机5800怎么开机,神舟5800笔记本怎么进bios
- 读写分离的适用场景(转载)
- Google Cloud TPUs支持Pytorch框架啦!
- Windows修改远程桌面端口方法步骤
- oform java_客户端表单通用验证checkForm(oForm)(1)
- 02 Apache Solr: 概览 Solr在信息系统架构中的位置
- 计算机考研单科成绩要求,考研单科分数是多少
- HTML5与触摸界面
- 25. 熟悉非标准的哈希容器
- case 日期when 范围_亚马逊运营干货:开case最全路径和各种实用链接,赶紧收藏...
- 游戏开发经验谈(二):对战类全球服游戏的设计与实现
- 第一范式、第二范式、第三范式、BCNF范式的区别
- android长截图工具下载,手机长截图怎么截?超方便的长截图App
- python实验报告代写_programs作业代写、代做data课程作业、代写Python实验作业、Python编程设计作业调试...
- 分享50个漂亮的双屏桌面壁纸资源(下篇)
- B2B、B2C、C2C、O2O分别是什么
- Altium FPC软硬结合板日志
热门文章
- h5如何动态获取键盘高度_动态获取键盘高度
- 页面缩放android浏览器,适用于所有移动浏览器的完整网页和禁用的缩放视口元标记...
- 用 IDEA 看源码的正确姿势!你掌握了吗?
- RateLimiter 的底层实现是啥?
- 一次线上JVM调优实践,FullGC40次/天到10天一次的优化过程
- MyBatis 的执行流程,写得太好了!
- 据说这套组合拳,可以把面试官给问懵逼了,你要不要试试?
- 有比 ReadWriteLock更快的锁?
- 终端复用命令行神器:tmux
- mysql简单概述_MySQL入门很简单: 1 数据库概述