目录
shutil.copy(filepath,targetpath)
导语
本人python是自学的,这些博客主要是自己做知识整理等用处。如果它对你有帮助我非常高兴,也希望大家能够留下宝贵的意见与建议。【这块内容我是从某个网上课程学的,所以整个讲述框架会有类似,侵权删】
OK 那么接下来就是关于python文件处理的第一部分啦!!
绝对路径与相对路径
首先,我们要了解文件路径有两种形式,绝对路径和相对路径。绝对路径就是我们常用的路径,比如 ‘D:\花园宝宝\玛卡巴卡.jpg’, 这个就是玛卡巴卡.jpg这个文件的绝对路径。
那么相对路径时什么呢?要搞清这个先要搞清另一个概念——工作路径。工作路径就是程序在运行的地方,可以简单理解为保存代码的文件夹。比如.py文件的路径是‘D:\python code\test.py’,那么工作路径就是‘D:\python code’。 理解了什么是工作路径之后,相对路径就好理解了。相对路径就是指直接以文件或文件夹的名称开头,相对于工作路径的位置。
举个栗子,绝对路径是‘D:\花园宝宝\玛卡巴卡.jpg’,
工作路径是'D:\花园宝宝',
那么‘’玛卡巴卡.jpg‘’就是相对路径。
再举个栗子,绝对路径是‘D:\动画片\花园宝宝\玛卡巴卡.jpg’
工作路径是‘D:\动画片’
那么‘花园宝宝\玛卡巴卡.jpg’就是相对路径。
下面介绍几个相关的函数
os.getcwd()
(get current working directory获得当前工作路径)
os.chdir(target_path)
(change directory改变工作路径)
import os
print(os.getcwd())
#输出 d:\Python Code
os.chdir(target_path) #把工作路径修改到target_path
特定路径下文件名称的获取
os.listdir(path)
我们想要处理文件的话,最重要也是最初的一步就是找到文件的路径,并使用python读入该路径下的文件。此处用到 os.listdir(path) 。 os是python 的一个包,使用前要import一下。
需要注意的是,Windows和Mac的文件路径的格式有所不同
windows使用 C:\yjy\Desktop
mac使用 /Users/yjy/Desktop
。
这是listdir的一个例子:文件路径中包含着单个文档,压缩包,文件夹。
import os
p=os.listdir('D:\计算机网络')
print(p)
输出如下,可以看到,listdir仅仅获取的是当前目录的所有文件(夹),不会再进一步把后面文件夹的内容也获取出来。
两个路径的拼接
os.path.join(path1,path2)
运行结果:path1+path2 直接上栗子:
import os
path = 'D:\计算机网络'
path_new = os.path.join(path,'slides')
p = os.listdir(path_new)
print(path_new)
print(p)
运行结果:
判断路径是否存在
那么在获取文件名之前,我们如何知道此目录是否存在呢?
os.path.exists(path)
(bool类型,该路径对应的文件夹存在时,返回true) 直接上栗子:
import os
path = 'D:\计算机网络'
path_new = os.path.join(path,'slides')
path_f = 'D:\阿巴阿巴'
print(os.path.exists(path_new))
print(os.path.exists(path_f))
运行结果:
创建文件路径
os.mkdir(path)
(在路径下创建一个新文件夹)
刚刚我们可以验证某个路径是否存在,那么假如我们需要的路径原本并不存在怎么办呢?(哦?右键新建文件夹?巧了嘛,我也会。)继续上栗子:
import os
path = 'D:\计算机网络'
path_f = 'D:\阿巴阿巴'
print('before mkdir')
print(os.path.exists(path_f))
os.mkdir(path_f)
print('after mkdir')
print(os.path.exists(path_f))
输出结果,可以看到创建路径成功了,如果你打开D盘查看的话就会看到一个叫“阿巴阿巴”的文件夹:
【注意】:mkdir不可以一次创建多级的文件路径,大白话说就是,得一个一个文件夹建。比如,我要创建D:\阿巴阿巴\玛卡巴卡 这个路径,初始状态下只有D盘,没有阿巴阿巴文件夹,那么玛卡巴卡这个文件夹其实对于D盘就是第二级的文件夹了。mkdir('D:\阿巴阿巴\玛卡巴卡')直接创建是不行的哦,必须先mkdir('D:\阿巴阿巴')然后再在阿巴阿巴文件夹的基础上创建玛卡巴卡文件夹。
判断路径是否为文件夹
os.path.isdir(path)
(bool类型,判断路径对应的文件是否为文件夹)
这个函数我暂时还没用到过,总之他就是判断一下你给的路径它究竟是不是个文件夹的路径,比如说你给的路径已经精确到具体的文件了, 那输出就是false。
这是颗栗子:
import os
path = 'D:\计算机网络'
path_new = os.path.join(path,'教材.pdf')
print(os.path.isdir(path_new))
运行结果:
文件移动(剪切与复制)【no复制黏贴!,太low啦】
shutil.move(原目录,目标目录)
(将原目录的文件移动到目标目录文件夹中,效果类似于剪切,注意此处要引入另一个模块shutil)
栗子栗子:
import os
import shutil
path = 'D:\计算机网络'
path_book = os.path.join(path,'教材.pdf')
target_path = 'D:\计算机网络\slides'
shutil.move(path_book,target_path)#把教材.pdf移动到sildes文件夹中
运行结果:
当然,这个函数也可以用来更改文件名,比如我想要将 ‘教材.pdf’ 改名为 ‘计算机网络教材.pdf’,那么原路径不变,目标路径改为 'D:\计算机网络\计算机网络教材.pdf' ,然后使用shutil.move()函数即可。
import os
import shutil
file = '教材.pdf'
path = 'D:\计算机网络'
filepath = os.path.join(path,file)
targetpath = path + '\计算机网络教材.pdf'
shutil.move(filepath, targetpath)
shutil.copy(filepath,targetpath)
(将filepath的文件复制到targetpath中)
这里就不给栗子啦,大家可以自己试一试,区别于shutil.move(),这个函数效果类似复制黏贴,原路径下的文件依旧是存在的。
获取文件大小
os.path.getsize(file_path)
(获取文件大小)
import os
print(os.path.getsize('D:\计算机网络\计算机网络教材.pdf'))
#输出为77999668
注意输出结果是以字节为单位的,所以要做的那位换算。
1字节—>*1024—>K—>*1024—>M—>*1024—>G
我这里输出的结果是77999668,所以大小为77999668字节,转换为常用的M,除1024^2,大约为74M。
对文件名的拆分
os.path.splitext()
(用于分离文件名,将文件名作为参数传入该函数,返回为一个元组)
注:分离后缀os.path.splitext(item)[1],分离前缀os.path.splitext(item)[0]
再来个栗子:
import os
path = 'D:\计算机网络'
path_book = os.path.join(path,'教材.pdf')
print(os.path.splitext(path_book))
print(os.path.splitext(path_book)[0])
print(os.path.splitext(path_book)[1])
运行结果:
要注意的是,文件路径在这里本质上都是以字符串的形式出现,所以我们可以通过一些字符串相关的操作对文件路径、名字等进行一些操作。比如split,直接 文件名.split() 就OK了。具体用splitext还是split看具体情况喽。今晚的最后一颗栗子:
file = '教材.pdf'
bookname = file.split('.')[0]
print(bookname)
输出结果:
好啦,今天就写到这里啦。基本上这些就是对文件路径的一些基本操作,有新的内容会补充,我们下一节见,bye~