Appearance
这个算是比较实用的知识了,能完成一些常规的文件操作。比如网上下载的视频,每一个文件名后面都有广告,想把这种固定的广告去掉,可以采用os中的文件重命名功能,可以配合递归文件夹来实现。
os的文件与目录函数介绍
函数名 | 参数 | 介绍 | 举例 | 返回值 |
---|---|---|---|---|
getcwd | 五 | 返回当前路径 | os.getcwd() | 字符串 |
listdir | path | 返回指定路径下所有的文件或文件夹 | os.listdir('c://windows') | 列表 |
makedirs | Path mode | 创建多级文件夹 | os.makedirs('d://code/py') | 无 |
removedirs | path | 删除多级文件夹 | os.removedirs('d://imooc/py') | 无 |
rename | oldname,newname | 重命名 | os.rename('d://imooc', 'd://im') | 无 |
rmdir | path | 只删除空文件夹 | os.rmdir('d://imooc') | 无 |
os.path模块常用函数
函数名 | 参数 | 介绍 | 举例 | 返回值 |
---|---|---|---|---|
exists | path | 文件或路径是否存在 | os.path.exists( 'd://' ) | bool |
isdir | path | 是否是路径 | os.path.isdir( 'd://' ) | bool |
isabs | path | 是否是绝对路径 | os.path.isabs( 'test' ) | bool |
isfile | path | 是否是文件 | os.path.isfule( 'd://test.txt' ) | bool |
join | path,path* | 路径字符串合并 | os.path.join( 'd://', ''test ) | 字符串 |
split | Path | 以最后一层路径为基准切割 | os.path.isabs( 'test' ) | 元组 |
sys中的常用方法
函数名 | 参数 | 介绍 | 举例 | 返回值 |
---|---|---|---|---|
modules | 无 | py启动时加载的模块 | sys.modules() | 字典 |
path | 无 | 返回当前py的环境路径 | sys.path() | 列表 |
exit | arg | 退出程序 | sys.exit(0) | 无 |
getdefaultencoding | 无 | 获取系统编码 | sys.getdefaultencoding() | 字符串 |
platform | 无 | 获取当前系统平台 | sys.platform() | 字符串 |
version(属性) | 无 | 获取python版本 | sys.version() | 字符串 |
argv | *args | 程序外部获取参数 | sys.argv | 列表 |
案例:删除文件名中无用的数据
python
import sys
import os
args = sys.argv
args.remove(args[0])
directory = ''
ch = '' # 要替换的字符
if len(args) == 1:
directory = os.getcwd()
ch = args[0]
elif len(args) >= 2:
directory = args[0]
if not os.path.isdir(directory):
print('参数1不是一个合法的路径')
sys.exit(0)
ch = ' '.join(args[1:]).strip()
else:
print('程序使用说明:')
print('1.传递一个参数,将当前目录下所有文件、文件夹名称中包含此参数的部分替换为空字符')
print('2.传递两个参数,将参数1目录下下所有文件、文件夹名称中包含参数2的部分替换为空字符')
sys.exit(0)
# 生成n个空格
def print_space(n):
for i in range(n):
print(" ", end="")
# 1.遍历文件夹列表
def test(param, i):
if os.path.isfile(param):
return
for direm in os.listdir(param):
print_space(i)
print(direm, end="")
if os.path.isfile(os.path.join(param, direm)):
pass
os.rename(os.path.join(param, direm), os.path.join(param, direm.replace(ch, '')))
print(f' ➡ {direm.replace(ch, "")}')
else:
print()
test(os.path.join(param, direm), i + 2)
for dire in os.listdir(directory):
test(os.path.join(directory, dire), 2)
print(dire)