Day 10 文件操作
Author: Denny YU
Created
文章目录
文件操作IO操作
1. 文本文件和二进制文件
-
文本文件
储存字符,默认是unicode字符集(两个字节表示一个字符),可以使用记事本程序打开。但是像word文档不是文本文件
-
二进制文件
二进制问价把数据内容用“字节”进行储存,无法用记事本打开。必须使用专用的软件解码,常见的有:MP4,MP3,JPG等格式文件
2. 创建文件对象open()
open(“文件路径”,“参数”)
参数有a,r,w,b,+;
模式 | 说明 |
---|---|
r | read读模式 |
w | write 写模式 |
a | append追加模式 |
b | binary二进制模式(可以与其他模式组合) |
+ | 读写模式(可以与其他模式一起组合) |
既然是文件对象,一个对象总有对应的属性和方法
文件对象的属性有:name 返回文件的名字, mode 返回文件的打开模式,closed 若文件被关闭则返回True
文件对象的方法
1. 文本文件的读取
首先需要文件对象具有可读属性
- read([size]):从文件中读取size个字符,并作为结果返回,如果没有size参数,则读取整个文件
- readline():读取一行作为结果返回
- readlines():每一行作为一个列表中的一个字符串元素
2. 文本文件的写入
文本文件的写入一般三个步骤
- 创建文件对象
- 写入数据
- 关闭文件对象
f = open("a.txt","a")
s="I am learning Python"
f.write(s)
f.close()
3. 关闭文件流
由于文件是由操作系统直接控制,打开文件后必须使用close()方法关闭文件对象
- 用try…else…finally语句
- 用with open(文件,参数) as 名字:语句;
try:
f = open(r"my01.txt","a")
str = "gaoqi"
f.write(str)
except BaseException as e:
print(e)
finally:
f.close()
##with open函数
s = ["高淇\n","高老三\n","高老五\n"]
with open(r"d:\bb.txt","w") as f:
f.writelines(s)
4. numerate()函数
enumerate()处理一个序列,生成enumerate对象,对象的元素为(index,源序列元素)
因此可以使用enumerate()修改列表中每一个元素
a=["我",'喜欢','编程']
b=enumerate(a)
c=[temp+" #"+str(index) if index==1 or index==2 else temp+" ####"+str(index) for index,temp in b ]
print(c)
##输出 ['我 ####0', '喜欢 #1', '编程 #2']
可以使用enumerate函数对读取文件的每一行后面加行号
with open("a.txt",'r',encoding="utf-8") as f:
lines = f.readlines()
lines = [line.rstrip()+" #"+str(index+1)+'\n' for index,line in enumerate(lines)]
with open("a.txt",'w',encoding="utf-8") as f:
f.writelines(lines)
OS 和OS.path模块
os模块可以帮助直接对操系统进行操作,可执行文件、命令、目录等等
1. os调用操作系统文件和命令
-
os.system调用windows系统记事本程序。 os.startfile()用来调用系统中可执行的文件
import os os.system("vesta") os.startfile("文件路径")
2. os.path模块
os.path提供了更多目录相关的操作
3. os模块-文件和目录操作
我们可以通过前面讲的文件对象对于文件内容的读写操作,如果,还需要对文件和目录做其他操作,可以使用os和os.path模块
-
os模块操作文件的方法
remove(path) 删除指定的文件 rename(src,dest) 重命名文件或目录 stat(path) 返回文件的所有属性 listdir(path) 返回path目录下的文件和目录列表 -
os模块下目录操作的相关方法
mkdir(path) 创建新文件夹 makedirs(path1/path2/) 创建多级目录 rmdir(path) 删除空目录 removedirs(path1/path2) 删除多级空目录 getcwd() 当前工作目录 chdir(path) 把path设为当前工作目录 walk() 遍历目录树 sep 当前操作系统所使用的路径分隔
4. 使用walk遍历
os.walk()方法:
返回一个3个元素的元组,(dirpath,pathname,filename)
import os
from sympy import li
p=tuple(os.walk("E:/python resources"))
print(len(p))
for i in p:
print(i,end="\n")
#for dirpath,dirnames,filenames in p:
# for dir in dirnames:
# print(dir)
# for file in filenames:
# print(os.path.join(dirpath,file))
Shutil模块(拷贝和压缩)
主要用来文件和文件夹的拷贝、移动、删除、压缩和解压缩
import shutil
import os
# shutil.copyfile("a.txt",'a_copy.txt')
# shutil.copytree("学习代码/test",'电影',ignore=shutil.ignore_patterns("*.mp4",'*.html'))##copy目录下所有文件
1. Shutil模块和zipfile模块,压缩与解压缩
##压缩与解压缩
shutil.make_archive('ziptest','zip','电影')
z1=zipfile.ZipFile('学习代码/z.zip','w')
z1.write("电影")
z1.write("operate files/d.txt")
z1.close()
递归算法
递归结构包括两个部分:
- 定义递归头
- 递归体
1. 使用递归展示目录树结构
import os
allfiles=[]
def getallFiles(path,level):
childfiles=os.listdir(path)
for file in childfiles:
filepath = os.path.join(path,file)
if os.path.isdir(filepath):
getallFiles(filepath,level+1)
allfiles.append(" "*level+filepath)
getallFiles('E:\ML\math',0)
for i in reversed(allfiles):
print(i)