文件复制
文件复制是这样的一个操作过程,用到一次读一次写,写的过程嵌套在第一次读的里面。注意只有文件才能open读写,文件夹不能open会报PermissionError。
#文件复制操作,先读源文件然后写到目的文件
#写操作
with open(r'C:\Users\XY\Desktop\个税.png','rb') as stream:
container=stream.read() #容器接收读流读到的文件
with open(r'D:\daima\个税.png','wb') as wstream:
wstream.write(container) #写流写读的文件
可以看到此时桌面的文件已经复制出现到D盘daima文件夹下了。
os模块(dirname,name,rfind,os.path.join)
那如果我们要复制文件夹怎么办呢,这时候我们要引入os模块(os模块中包含很多操作文件的东西)
import os
path=os.path.dirname(__file__) #当前文件的文件夹目录名字(绝对路径str型)
print(path)
path=path.join(iterbale) #path.join 是字符串或列表的拼接
path1=os.path.join(path, paths) #路径的拼接,文件夹目录的名字+文件名字
#用于复制文件操作
#用于复制文件操作
import os
with open(r'C:\Users\XY\Desktop\个税.png','rb') as stream:
container=stream.read()
name=stream.name #C:\Users\XY\Desktop\个税.png
name1=name[-6:]
'''
还有一种方法 name1=name[name.rfind('\\')+1 : ] 意思是从右查询'\'的位置 因为斜杠会被识别转义字符,所以我们不用r 而用两个斜杠'\\'
'''
print(name1) #个税.png
path=os.path.dirname('__file__')
path1=os.path.join(path,name1) #join后允许拼接多个
with open(path1,'wb') as wstream:
wstream.write(container)
要获取文件名不单可以用rfind,还可用os模块中的os.path.split(path)
#获取文件名字
import os
name=os.path.split(r'C:\Users\XY\Desktop\个税.png')
#分割生成一个元组,第一个元素为目录,第二元素为文件名
print(name[1])
而os.path.splitext(path)可以把文件的后缀名分隔开。
相对路径,绝对路径
os.path.isabs():判断是否为绝对路径
os.path.abspath():获取绝对路径
相对路径:相对路径是有参照点的,比如参照现在正在编辑的文件来找文件,即为相对路径
相对路径中同级别的文件、目录可直接调用,要返回上一级去寻找上一级的同级目录下的文件可用‘../’来调用。
嵌套目录,比如有两层,可以用'../../'来返回
要通过相对路径获取绝对路径:
#要通过相对路径获得绝对路径
import os
p=os.path.abspath('lambda_map_reduce.py') #括号中是相对路径,因为与编写代码同级
print(p) #输出为绝对路径
D:\daima\lambda_map_reduce.py
获取当前文件的绝对路径:
#获取当前文件的绝对路径
p1=os.path.abspath(__file__)
print(p1)
要获取当前文件的工作目录:
#要获取当前文件的工作目录:
p2=os.getcwd()
print(p2)
获取文件大小
#获取文件大小
size=os.path.getsize('..')
print(size)
28672 单位(字节)
获取指定目录下的所有文件列表
#返回指定目录下的文件列表
listd=os.listdir(r'D:/daima')
print(listd)
创建一个文件夹ppp:
#创建一个文件夹
ppp=os.mkdir(r'D:/ppp')
print(ppp) #None
删除文件及文件夹:
#删除空文件夹
os.rmdir(r'D:/ppp')
#删除多个文件夹或嵌套文件夹:
os.removedirs(name)
#删除文件
os.remove(path)
#完整删除过程
#删除文件夹中多个文件并删除文件夹
listd=os.listdir(path)
for file in listd:
path1=os.path.join(path,file)
os.remove(path1)
else: #循环执行完后执行else
os.rmdir(path)
切换目录:
os.chdir()