0 前言1 os模块1.1 方法列表1.2 示例 搜索当前所有文件和子文件夹的文件1.3 Windows下的路径处理
2 pathlib库2.1 方法列表
3 通过批处理执行py文件
0 前言
Python os模块包含普遍的操作系统功能。如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的
os库是python自带的,无需安装,但需要import
在window下,路径包括绝对路径和相对路径 绝对路径C:\Documents\Newsletters\Summer2018.pdf 相对路径..\Publications\TravelBrochure.pdf 路径path包含目录名dir和文件名file 在python中,由于\是转义符号,所以路径字符串里都要使用\\
1 os模块
1.1 方法列表
只列举和文件地址相关的方法
os模块说明
=os.getcwd()函数得到当前工作目录,返回path=os.listdir(path)返回指定目录下的所有文件和目录名,返回列表=os.walk(path)返回指定目录和子目录下的所有文件名,返回迭代器os.rename(path)重命名一个文件或文件夹os.remove(path)删除一个文件或文件夹os.system(shell)运行shell命令=os.path.split(path)分离路径的目录名和文件名,返回列表=os.path.join(path,name)连接目录与文件名或目录,返回path,win平台用\,其他平台用/=os.path.splitext(path)从路径中分离出扩展名,返回列表,拓展名在[1]=os.path.dirname(path)返回目录=os.path.basename(path)返回文件名,包括拓展名=os.path.isfile(path)检验给出的路径是一个文件,返回布尔值=os.path.isdir(path)检验给出的路径是一个目录,返回布尔值
1.2 示例 搜索当前所有文件和子文件夹的文件
os.walk()的返回值是一个生成器(generator),每次遍历的对象都是返回的是一个三元元组(root, dirs, files)
root所指的是当前正在遍历的这个文件夹的本身的地址dirs 是一个list,内容是该文件夹中所有的目录的名字(不包括子目录)files同样是 list , 内容是该文件夹中所有的文件(不包括子目录)
函数会自动改变root的值使得遍历所有的子文件夹。所以返回的三元元组的个数为所有子文件夹(包括子子文件夹,子子子文件夹等等)加上1(根文件夹)
import os
file_list
= []
for root
, dirs
, files
in os
.walk
(os
.getcwd
()):
for file in files
:
file_list
.append
(os
.path
.join
(root
, file))
print(file_list
)
结果为:
['F:\\SoftwareTest\\os\\osTest.py',
'F:\\SoftwareTest\\os\\.idea\\misc.xml',
'F:\\SoftwareTest\\os\\.idea\\modules.xml',
'F:\\SoftwareTest\\os\\.idea\\os.iml',
'F:\\SoftwareTest\\os\\.idea\\workspace.xml',
'F:\\SoftwareTest\\os\\.idea\\inspectionProfiles\\profiles_settings.xml']
1.3 Windows下的路径处理
windows正反斜杠二者皆可表示路径,python表示一个路径可以字符串前加r防止转意 linux只用正斜杠表示路径
输入window路径时可以使用两种方式: path = 'F:\\SoftwareTest\\MyTool' path =r'F:\SoftwareTest\MyTool'
返回window路径时可能有三种形式: 第1种形式:path = 'F:/SoftwareTest/MyTool' 第2种形式:path = 'F:\SoftwareTest\MyTool' 第3种形式:path = 'F:\\SoftwareTest\\MyTool' 使用repr()将第2种形式变为第3种形式 而os.path.join()在window下固定使用'\’连接,所以只能用于第2种形式。
2 pathlib库
Python3的系统标准库pathlib模块的 Path 对路径的操作会更简单。甚至可以说pathlib已经可以完全替代os.path
from pathlib
import Path
2.1 方法列表
Path类说明
self=Path.cwd()返回当前目录,在window平台是反斜杠表示,返回Path类self=Path(file)将路径转为Path类,得到的路径是反斜杠表示=str(self)将Path类变回字符串=self.home()获取home目录,返回Path类=self.parent获得上一级父目录,可连续使用,返回Path类=self.parents获得所有父目录,返回Path类的迭代器=self.name目录的最后部分,文件名或目录名,返回字符串=self.stem目录的最后部分,没有拓展名,返回字符串=self.suffix目录的最后部分的拓展名,返回字符串=self.with_name(name)替换目录最后一个部分,返回Path类=self.with_suffix(suffix)替换扩展名,返回Path类=self.joinpath(str)拼接路径,返回Path类str->字符串=self.resolve()返回绝对路径,返回Path类=self.iterdir()当前目录的子目录和文件,不包括子目录的文件返回Path类的迭代器self.mkdir(parents = True, exist_ok = True)创建目录parents->如果父目录不存在,则创建父目录exist_ok->只有在目录不存在时创建目录,目录已存在时不会抛出异常self.rmdir()删除目录,如果包含文件就会报错self.unlink()删除文件=self.is_dir()是否是目录=self.is_file()是否是普通文件=self.exists()该路径是否指向现有的目录或文件=self.stat()返还指定路径的文件信息=self.match(pattern)用正则式检查路径是否符合规则,返回bool=self.glob(pattern)用正则式匹配当前目录下路径,返回生成式=self.rglob(pattern)用正则式递归所有子目录下路径,返回生成式=self.open()就是调用open(file)的另一种写法=self.rename(newname)重命名,返回newname的Path类=self.replace(newpath)把self移动到newpath并重命名,存在则覆盖返回newpath的Path类newpath->字符串
3 通过批处理执行py文件
rem 注释语句
@
echo off rem @表示控制台不显示这条语句,
echo off表示从下句开始不在控制台显示
echo %cd
% rem cd是当前路径,
%cd
%是cd的值
set current_path=
%cd
% rem
set可以赋值
echo %current_path
% rem
echo %%显示变量的值
set python_path=
%current_path
%\gen_hal\Python27 rem 设置python
.exe所在的文件夹
set generate_hal_script_path=
%current_path
%gen_hal rem 设置py文件所在的文件夹
set datainterface_path=
%current_path
% rem 数据源所在的文件夹和文件
set datainterface_file=
"DataInterface.xls"
set hal_path=
%current_path
% rem 生成对象所在的文件夹和文件
set hal_file=
"HAL.c"
set path=
%python_path
%;%generate_hal_script_path
%;C:\WINDOWS\system32\wbem
;%path
%
if exist HAL
.c attrib
-r HAL
.c
rem 在控制台显示文字
@
echo Generating HAL
...
rem 使用python
.exe运行gen_hal
.py,并且传入
"DataInterface.xls"和
"HAL.c"两个参数
python
%generate_hal_script_path
%\gen_hal
.py
%datainterface_path
%\\
%datainterface_file
% %hal_path
%\\
%hal_file
%
if exist HAL
.c
echo hal
.c successfully generated