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...相关推荐

  1. python常用语法和示例_使用Python中的示例进行输入和输出操作

    python常用语法和示例 A Program needs to interact with the user to accomplish the desired task; this is done ...

  2. python中newfile是干嘛用的_python 文件操作方法

    python中对文件.文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块. 得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd() 返回指定目录下的所有文件和目 ...

  3. python怎么安装打开文件不存在怎么办呢_如果文件不存在,Python中的open()不会创建文件...

    16 个答案: 答案 0 :(得分:712) 您应该open使用w+模式: file = open('myfile.dat', 'w+') 答案 1 :(得分:112) 以下方法的优点是,即使在路上引 ...

  4. python中f点flush是什么函数_Python文件操作及内置函数flush原理解析

    1.打开文件得到文件句柄并赋值给一个变量 2.通过句柄对文件进行操作 3.关闭文件 示例文件 '你好呀' 我是于超 嗯 再见 文件操作基本流程 f=open('chenli',encoding='ut ...

  5. python中数字和字符串可以直接相加_用c语言或者python将文件中特定字符串后面的数字相加...

    匿名用户 1级 2014-08-31 回答 代码应该不难吧.既然用爬虫爬下来了,为什么爬取数据的时候没做处理呢. 之前用过Scrapy爬虫框架,挺好用的,你可研究下. 代码: #!coding=utf ...

  6. python中字典不自动排序/删除指定类型文件/执行可执行文件的返回值

    1.python 字典的用法 from collections import OrderedDict dict =OrderedDict() dict['foo']=3 dcit['aol']=1 2 ...

  7. python中gettext文件格式_如何将gettext .mo文件转换为.po文件 - python

    Improve this question 当.po文件不再可用时,有什么方法可以将.mo文件转换为.po文件源?我需要编辑.mo文件的内容,但没有.po文件.可能吗? 参考方案 msgunfmt [ ...

  8. python中排序英文单词怎么写_Python实现对文件进行单词划分并去重排序操作示例...

    本文实例讲述了Python实现对文件进行单词划分并去重排序操作.,具体如下: 文件名:test1.txt 文件内容: But soft what light through yonder window ...

  9. python中的数据写入与添加数据写入文件(to_csv)

    很多情况下,大家可能会遇到相同情况,就是现在有一些数据需要保存在某个文件里面,但是后续会不断更新添加新的数据,例如在爬虫的时候,一页一页爬取数据的时候,当然可以将所有页数据先合并到一起,再保存起来,但 ...

  10. python中 .py .pyc .pyw .pyo .pyd各后缀文件区别

    转载自:https://www.cnblogs.com/deadwood-2016/p/8143351.html .py 文件 以 .py 作扩展名的文件是 Python 源代码文件,由 python ...

最新文章

  1. 【原创】一种维护型项目升级打包的解决方案
  2. 百度翻译接口测试(2)
  3. 关于使用 ./ 执行sh文件报错-bash: ./startup.sh: /bin/sh^M: bad interpreter: No such file or directory
  4. 计算机5800怎么开机,神舟5800笔记本怎么进bios
  5. 读写分离的适用场景(转载)
  6. Google Cloud TPUs支持Pytorch框架啦!
  7. Windows修改远程桌面端口方法步骤
  8. oform java_客户端表单通用验证checkForm(oForm)(1)
  9. 02 Apache Solr: 概览 Solr在信息系统架构中的位置
  10. 计算机考研单科成绩要求,考研单科分数是多少
  11. HTML5与触摸界面
  12. 25. 熟悉非标准的哈希容器
  13. case 日期when 范围_亚马逊运营干货:开case最全路径和各种实用链接,赶紧收藏...
  14. 游戏开发经验谈(二):对战类全球服游戏的设计与实现
  15. 第一范式、第二范式、第三范式、BCNF范式的区别
  16. android长截图工具下载,手机长截图怎么截?超方便的长截图App
  17. python实验报告代写_programs作业代写、代做data课程作业、代写Python实验作业、Python编程设计作业调试...
  18. 分享50个漂亮的双屏桌面壁纸资源(下篇)
  19. B2B、B2C、C2C、O2O分别是什么
  20. Altium FPC软硬结合板日志

热门文章

  1. h5如何动态获取键盘高度_动态获取键盘高度
  2. 页面缩放android浏览器,适用于所有移动浏览器的完整网页和禁用的缩放视口元标记...
  3. 用 IDEA 看源码的正确姿势!你掌握了吗?
  4. RateLimiter 的底层实现是啥?
  5. 一次线上JVM调优实践,FullGC40次/天到10天一次的优化过程
  6. MyBatis 的执行流程,写得太好了!
  7. 据说这套组合拳,可以把面试官给问懵逼了,你要不要试试?
  8. 有比 ReadWriteLock更快的锁?
  9. 终端复用命令行神器:tmux
  10. mysql简单概述_MySQL入门很简单: 1 数据库概述