• Python的os和sys模块的实例应用场景(待续)


    转换工作目录

    有些必须要在当前工作目录下执行,而我们的脚本位置却不在当前目录

    import os
    import sys
    path=r"D:xxxx"
    # 列出该文件夹里的所有文件,这里获取的是一个列表啊
    fileList = os.listdir(path) 
    currentpath = os.getcwd()
    # 这个改工作目录好厉害啊,工作目录不同会怎样,在python中
    os.chdir(path) 
    # 这里可对当前的想要执行的目录执行该
    def demo():
      pass
    # 改工作目录
    os.chdir(currentpath)
    # 刷新
    sys.stdin.flush()
    

    合成md文件

    数据处理若是放在列表中,把多个字符串格式的元素存放在列表中,写入使用writelines

    import os
    import sys
    
    path=r"D:\\xxx"
    fileList = os.listdir(path) # 列出该文件夹里的所有文件,这里获取的是一个列表啊
    currentpath = os.getcwd()
    # 更改工作目录
    os.chdir(path) 
    contents = []
    for md in fileList:
        # print(md)
        with open(md, 'r', encoding='utf-8') as f:
            # 文件较大,按行读(只有内存不够时候才用)
            contents.append(f.read()) # read()把文章一次性读入
    # with open("result.md", "a+", encoding='utf-8') as f:
    #     f.writelines(contents)
    with open("result.md", 'w',encoding='utf-8') as f:
        f.writelines(contents)
    os.chdir(currentpath)
    # 刷新
    sys.stdin.flush()
    

    递归出指定目录下地所有子文件夹/子文件

    返回可指定带路径的文件,和不带路径的文件
    cur_path 和file

    import os
    def show_files(path, all_files):
        # 首先遍历当前目录所有文件,listdir只有文件
        file_list = os.listdir(path)
        # 准备循环判断每个元素是否是文件夹还是文件,是文件的话,把名称传入list,是文件夹的话,递归
        for file in file_list:
            # 利用os.path.join()方法取得路径全名,并存入cur_path变量,否则每次只能遍历一层目录
            cur_path = os.path.join(path, file)
            # 判断是否是文件夹
            if os.path.isdir(cur_path):
                show_files(cur_path, all_files)
            else:
                # 返回所有子文件路径并加到列表中
                # 若想输出的是带路径的文件,传入的则是cur_path 
                # 若想直接输出文件名则,传入的是file 
                all_files.append(cur_path)
    
        return all_files
    

    复制文件到指定目录

    新的文件需要指定目录才可以

    import os
    import shutil
    
    oldname= r"D:\xxxx\result.md"
    newname=r"D:\xxxx\Test\a.md"
    shutil.copyfile(oldname,newname)
    

    实际案例

    提取某文件夹的所有.pdf文件,然后将其复制在指定的目录下

    import os
    import shutil
    
    ## 递归遍历出所有的子文件夹
    def show_files(path, all_files=[]):
        # 首先遍历当前目录所有文件,listdir只有文件
        file_list = os.listdir(path)
        # 准备循环判断每个元素是否是文件夹还是文件,是文件的话,把名称传入list,是文件夹的话,递归
        for file in file_list:
            # 利用os.path.join()方法取得路径全名,并存入cur_path变量,否则每次只能遍历一层目录
            cur_path = os.path.join(path, file)
            # 判断是否是文件夹
            if os.path.isdir(cur_path):
                show_files(cur_path, all_files)
            else:
                # 返回所有子文件路径并加到列表中
                # 若想输出的是带路径的文件,传入的则是cur_path 
                # 若想直接输出文件名则,传入的是file 
                all_files.append(cur_path)
    
        return all_files
    path = r"D:xxx"
    all_files = show_files(path)
    new_files = r"D:xxx
    for i in all_files:
        # 提取指定后缀的文件
        if ".pdf" in i :
            a = os.path.split(i)
            a = a[-1]
            shutil.copyfile(i,new_files + '\{}'.format(a))
    
  • 相关阅读:
    0806 c#总复习
    0804 递归
    0808 html基础
    0803结构体,枚举类型
    0801out传值
    0731函数
    0730特殊集合
    0728多维数组,ArrayList集合
    js 获取url链接的任意参数
    jq dom操作
  • 原文地址:https://www.cnblogs.com/wkhzwmr/p/16095216.html
Copyright © 2020-2023  润新知