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)