本次学习内容均来自DataWhale第26期组队学习
https://github.com/datawhalechina/team-learning-program/tree/master/OfficeAutomation
import pandas as pd
import numpy as np
1、文件自动化处理
1.1 读写文件
1.1.1 文件名和文件路径
os.path.join()是用于路径拼接的
语法:
os.path.join([path_1],[path_2],[path_3],…)
import os
os.path.join('datawale','docu')
'datawale\\docu'
os.path.join('study','datawale','docu')
'study\\datawale\\docu'
!注意:这里的双斜杠\,前面一个\表示转义。而Linux系统中,路径与文件名之间是用正斜杠’/'作分隔符的
1.1.2 当前工作目录
import os
os.getcwd()
'D:\\study\\datawhale\\OfficeAutomation'
# 改变工作路径
os.chdir("D:\\study\\datawhale\\python办公自动化")
os.getcwd()
'D:\\study\\datawhale\\python办公自动化'
1.1.3 路径操作
1.1.3.1 绝对路径和相对路径
绝对路径从根目录开始,相对路径,相对于该程序当前的工作目录
相对路径中,单个点“.” 表示当前目录;两个点“…”表示上一级目录,即父文件夹
os.path.abspath(path):表示将path相对路径转换为绝对路径,返回的是绝对路径的字符串;
os.path.isabs(paht):判断path是否是绝对路径,是则返回True,不是则返回False
# 首先看一下当前的路径,就是刚刚学习的
os.getcwd()
'D:\\study\\datawhale\\python办公自动化'
os.path.abspath(".")
'D:\\study\\datawhale\\python办公自动化'
os.path.isabs(".")
False
os.path.isabs(os.path.abspath(".")) # 先将相对路径转换为绝对路径,然后判断是否是绝对路径
True
1.1.3.2 路径操作
os.path.relpath(path,start):返回从start路径到path的相对路径的字符串,如果start没有提供,就从当前工作路径作为开始路径
os.path.dirname(path):返回当前路径的目录名称
os.path.basename(path):返回当前路径的文件或文件夹名称
os.path.relpath("D:\\study\\datawhale\python办公自动化",'D:\\study')
'datawhale\\python办公自动化'
os.path.relpath("D:\\study\\datawhale\\python办公自动化")
'.'
os.path.relpath("D:\\study\\datawhale\\OfficeAutomation")
'..\\OfficeAutomation'
因为当前工作路径被变更为:D:\study\datawhale\python办公自动化,所以从当前路径出发到达OfficeAutomation目录,就要先到上一级datawhale目录,然后再进入OfficeAutomation目录。就到达了函数中的path
我的python办公自动化文件夹中有一张python语言的发明者吉多·范罗苏姆(Guido van Rossum) 的照片,基于这张照片,我们可以利用os.path.dirname得到这张照片的目录名
os.path.dirname("D:\\study\\datawhale\\python办公自动化\\python之父.jpg")
'D:\\study\\datawhale\\python办公自动化'
而os.path.basename则可以返回当前路径的文件或者文件夹的名字
# 返回文件名
os.path.basename("D:\\study\\datawhale\\python办公自动化\\python之父.jpg")
'python之父.jpg'
# 返回文件夹名——示例1
os.path.basename("D:\\study\\datawhale\\python办公自动化")
'python办公自动化'
# 返回文件夹名——示例2
os.path.basename("D:\\study\\datawhale")
'datawhale'
如果同时需要文件名和当前文件的目录名,则可以调用os.path.split(),获得两个字符串的元组
caFilePath = "D:\\study\\datawhale\\python办公自动化\\python之父"
os.path.split(caFilePath)
('D:\\study\\datawhale\\python办公自动化', 'python之父')
当然也可以用之前的函数分别获得路径和文件名,然后将返回的结果放在一个元组中
(os.path.dirname(caFilePath),os.path.basename(caFilePath))
('D:\\study\\datawhale\\python办公自动化', 'python之父')
结果一样
如果想获得某个路径中每个文件夹名称的字符串列表,可以利用os.path.sep和split()函数进行分割获取
os.path.sep:路径分隔符,在windows系统下返回\\,在Linux系统下返回/
os.path.sep
'\\'
caFilePath.split(os.path.sep)
['D:', 'study', 'datawhale', 'python办公自动化', 'python之父']
1.1.3.3 路径有效性检查
如果提供的路径不准确,python就会奔溃报错,os.path模块提供了一些函数,用于检查路径是否真实存在,以及判断是文件还是文件夹
os.path.exists(path):判断path参数所指的文件或者文件夹是否存在
os.path.isfile(path):判断path参数是否存在,并且是一个文件则返回True,否则返回False
os.path.isdir(path):判断path是否存在,并且是一个文件夹,则返回True,否则返回False
os.path.exists("C:\\Windows")
True
os.path.exists("D:\\study\\datawhale\python办公自动化\\hello.jpg")
False
os.path.isfile("D:\\study\\datawhale\python办公自动化\\python之父.jpg") # 路径有效且为文件
True
os.path.isfile("D:\\study\\datawhale\python办公自动化") # 路径有效,但是非文件
False
os.path.isfile("D:\\study\\datawhale\OfficeAutomation\\python之父.jpg") # 文件是文件,但是路径不对
False
os.path.isdir("D:\\study")
True
os.path.isdir("D:\\studys")
False
os.path.isdir("D:\\study\\datawhale\OfficeAutomation\\python之父.jpg")
False
1.1.4 文件及文件夹操作
1.1.4.1 用 os.makedirs 创建新的文件夹
os.makedirs("D:\\study\\datawhale\\practice")
---------------------------------------------------------------------------
FileExistsError Traceback (most recent call last)
<ipython-input-40-6dd7f90855cc> in <module>
----> 1 os.makedirs("D:\\study\\datawhale\\practice")
D:\application\Anaconda3\lib\os.py in makedirs(name, mode, exist_ok)
221 return
222 try:
--> 223 mkdir(name, mode)
224 except OSError:
225 # Cannot rely on checking for EEXIST, since the operating system
FileExistsError: [WinError 183] 当文件已存在时,无法创建该文件。: 'D:\\study\\datawhale\\practice'
os.makedirs()会检查该文件夹是否已经存在,若已经存在则不会覆盖,而是报错
如果需要创建的文件夹的上一层文件夹也不存在,则会自动创建所有必要的中间文件夹
os.makedirs("D:\\study\\datawhale\\tmp\我就看看你")
1.1.4.2 查看文件大小和文件夹内容
os.path.getsize(path):返回path参数中文件的字节数(即大小)
os.listdir(path):返回path参数下的所有文件名,以列表形式呈现
os.path.getsize("D:\\study\\datawhale\\python办公自动化\\python之父.jpg")
45605
os.listdir("D:\\study\\datawhale")
['OfficeAutomation', 'practice', 'python办公自动化']
os.listdir("D:\\study\\datawhale\\python办公自动化")
['python之父.jpg', 'python学习路径.png']
如果想获取某个文件夹下所有文件的大小之和,可以写一个简单的循环
totalSize=0
for filename in os.listdir