赞
踩
IO流主要作用与计算机中的输入与输出操作,一般来说,常见的IO流操作是内存和磁盘之间的输入和输出,它是一种持久操作,将数据持久化在磁盘上
在计算机中,它只能识别0和1,因此我们的文本文件要被计算机识别并存储在硬盘中需要我们利用编码技术将内容翻译成0和1存入。在计算机中有许多编码:UTF-8、GBK、Big5等等,不同的编码,对于相同的内容翻译成的二进制也不相同
UTF-8为目前全球通用的编码格式
在Python中使用open函数可以打开一个已存在的文件或者创建一个新文件
语法:open(name,mode,encoding)
name:目标文件名的字符串或者是文件所在的具体路径
mode:打开文件的模式
encoding:编码格式
f = open("a.txt","w",encoding="UTF-8")
注意:encoding的顺序位置不是第三位,所以不能使用位置参数,需要用关键字参数指定
在open函数中有三种基础访问模式即mode,分别为r、w、a
r:以只读方式打开文件,其文件指针放在开头(默认模式)
w:以只写方式打开文件,如果文件已存在则打开文件并且从头开始编辑文件,原有内容会被删除,若果文件不存在则会创建一个新文件
a:以追加方式打开文件,如果文件已存在则会在原有内容后添加新内容,如果文件不存在则会创建一个新文件进行写入
read()方法
语法:文件对象.read(num)
num表示要从文件中读取的长度,单位为字节,如果没有num则表示读取文件中所有数据
- f = open("a.txt","r",encoding="UTF-8")
- print(f"读取十个长度:{f.read(10)}")
读取十个长度:hello word
但是需要注意的是,当重复读取时,它不会从头开始读取,而是从上次读取位置开始
- f = open("a.txt","r",encoding="UTF-8")
- print(f"读取十个长度:{f.read(10)}")
- print(f"读取十个长度:{f.read(10)}")
'运行
读取十个长度:hello word
读取十个长度:!
python
p
readlines()方法
按照行的方式将文件中的内容进行一次性读取,返回值为列表,文件中的每一行数据为一个元素
- f = open("a.txt","r",encoding="UTF-8")
- print(f"内容为:{f.readlines()}")
'运行
内容为:['hello word!\n', 'python\n', 'pycharm']
readline()方法
一次性读取一行内容
- f = open("a.txt","r",encoding="UTF-8")
- print(f"第一行:{f.readline()}")
- print(f"第二行:{f.readline()}")
'运行
第一行:hello word!
第二行:python
for循环读取文件行
- f = open("a.txt","r",encoding="UTF-8")
- for i in f:
- print(f"每一行数据为:{i}")
'运行
每一行数据为:hello word!
每一行数据为:python
每一行数据为:pycharm
在读取文件后需要关闭文件对象
通过close()方法关闭文件,如果不关闭文件,会导致文件一直被Python程序占用
- f = open("a.txt","r",encoding="UTF-8")
- f.close()
首先需要将文件打开模式改为w
write()方法
直接调用write()方法后并不会直接写入文件,而是会先在程序的内存中即缓冲区
在程序运行后,文件内容会清空即为内容,但是在程序运行中时,write()中的内容并不会写入,只有在程序运行完后write()中的内容才会写入
因此我们想要在程序运行中就将write()中的内容写入就需要使用flush()方法
- import time
- f = open("a.txt","w",encoding="UTF-8")
- f.write("1111111")
- time.sleep(100000)
flush()方法
flush()为内容刷新,在write()方法使用后调用flush()会将缓冲区中的内容写入文件中
- import time
- f = open("a.txt","w",encoding="UTF-8")
- f.write("1111111")
- f.flush()
- time.sleep(100000)
如果文件存在则在文件原有内容后追加内容
- f = open("a.txt","a",encoding="UTF-8")
- f.write("\n2222222")
- f.flush()
- f.close()
IO操作字节数据:将mode改为rb或wb
字节可以操作任何数据,字符只能操作字符数据
- f = open("1.jpg","rb")
- print(f.read())
注意:字节流操作大数据时,不建议一次性读取
字符流读到最后返回“”,字节流读到最后返回b“”
简易版:
- def copy(src,dest):
- f1 = open("src","rb")
- f2 = open("dest","wb")
- f2.write(f1.read())
优化版:
- from os import path
- import uuid
- def copy(src,dest):
- src = input("请输入你要备份的数据路径:")
- dest = input("请输入你要保存的数据路径:")
- f1 = open("src","rb")
- filename = src[src.rfind("\\")+1:]
- f2 = open(path.join(dest,filename),"wb")
- while True:
- #以M为单位读取数据
- date = f1.read(1024*1024)
- if date == b"":
- print("数据备份完成")
- break
- else:
- f2.write(date)
- f1.close()
- f2.close()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。