• 文件和目录操作|多进程和多线程【python进阶篇】


    创建目录

    在这里插入图片描述

    操作系统。MakeDir可以递归地创建目录结构,例如
    导入操作系统

    makedirs('tmp/python/fileop',exist_ok=True)
    
    • 1

    将在当前工作目录下创建TMP目录,在TMP目录下创建python目录,在python目录下创建fileop目录
    exist_ Ok=true指定如果要创建的目录已经存在,则不会报告任何错误

    删除文件或目录

    操作系统。Remove可以删除文件,例如

    os.remove('sdf.py')
    
    • 1

    Rmtree()可以递归删除目录的所有子目录和子文件,例如

    rmtree('tmp',ignore_errors=True)
    
    • 1

    注意:参数ignore_ Errors=true确保在目录不为空时不会引发异常。
    复制文件
    shutil模块中有许多目录文件操作功能
    要复制文件,可以使用shutil模块的copyfile功能。
    例如
    从shutil导入复制文件

    #将d:/tools/first Py复制到e:/first.Py
    copyfile('d:/tools/first.py'、'e:/first.py')
    
    • 1
    • 2

    请注意,如果在复制之前,e:/first Py已经存在,它将被copy覆盖,因此在使用此函数时必须小心。

    副本目录

    如果我们想将一个目录中的所有内容(包括子目录和文件、子目录中的子目录和文档等)复制到另一个目录,我们可以使用shutil的copytree功能。
    如下所示
    从shutil导入copytree

    #将d:/tools/aaa目录中的所有内容复制到e:/bbb
    copytree('d:/tools/aaa'、'e:/new/bbb')
    
    • 1
    • 2

    请注意,复制前目标目录不得存在,否则将报告错误。
    在执行上述代码之前,如果e:/new/bbb已存在,则在执行copytree时将报告错误
    在执行上述代码之前,如果目录e:/new不存在,则在执行copytree时,它将创建目录e:/new,然后创建目录e:/new/bbb,然后将目录d:/tools/aaa的所有内容复制到e:/new/bbb。
    在执行上述代码之前,如果目录e:/new存在,但e:/new/bbb不存在,则在执行copytree时,将仅创建e:/new/bbb,然后将目录d:/tools/aaa中的所有内容复制到e:/new/bbb。

    import os
    
    # 修改目录名 d:/tools/aaa 为 d:/tools/bbb
    os.rename('d:/tools/aaa','d:/tools/bbb')
    
    # 修改文件名 d:/tools/first.py 为 d:/tools/second.py
    os.rename('d:/tools/first.py','d:/tools/second.py')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    对文件路径名的操作

    对于文件名操作,如获取文件名、文件所在的目录以及文件路径的拼接,可以使用os Path模块。
    通常,我们喜欢使用格式化字符串的方法来拼接文件路径,但如果您的程序需要在多个平台(如Linux和windows)上运行,则它们路径的分隔符是不同的。在windows上是\,而在Linux上是/。
    在这种情况下,我们应该使用os路径模块。它可以自动处理数据,如数据/数据CSV和数据\数据文件路径差异,如CSV。
    例如:

    >>> import os
    >>> path = '/Users/beazley/Data/data.csv'
    
    >>> # 获取路径中的文件名部分
    >>> os.path.basename(path)
    'data.csv'
    
    >>> # 获取路径中的目录部分
    >>> os.path.dirname(path)
    '/Users/beazley/Data'
    
    >>> # 文件路径的拼接
    >>> os.path.join('tmp', 'data', os.path.basename(path))
    'tmp/data/data.csv'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    进程和线程的概念

    我经常被问及过程和线程之间的区别。
    简单地说:进程是一个正在运行的程序。
    我们编写的python程序(或其他应用程序,如画笔、QQ等)在运行时称为进程
    打开windows下的任务管理器,其中显示当前系统上运行的进程。
    在这里插入图片描述
    例如,在以下程序运行后,只有一个线程,即主线程。在主线程中,代码按顺序执行,主线程退出,直到执行结束。与此同时,这一进程已经结束。

    fee = input('请输入午餐费用:')
    members = input('请输入聚餐人姓名,以英文逗号,分隔:')
    
    # 将人员放入一个列表
    memberlist = members.split(',') 
    # 得到人数
    headcount = len(memberlist) 
    
    # 计算人均费用
    avgfee = int (fee) / headcount
    print(avgfee)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    我们可以看到,我们的系统中运行着许多进程,如QQ、搜狗输入法等。
    在运行这些程序之前,它们的程序代码文件存储在磁盘上,即扩展名为.Exe的文件。
    双击它们,然后单击这些。Exe文件将由操作系统加载到内存中,运行并成为进程
    系统中的每个进程至少包含一个线程
    线程由操作系统创建。每个线程对应于代码执行的数据结构,它在代码执行期间保存重要的状态信息。
    没有线程,操作系统无法管理和维护代码操作的状态信息。
    因此,在创建线程之前,操作系统不会执行我们的代码。
    虽然我们之前编写的python程序中没有创建线程的代码,但事实上,当python解释器程序运行(成为进程)时,操作系统会自动创建一个线程,通常称为主线程,并在此主线程中执行代码指令。
    当解释器执行我们的Python程序代码时。我们的代码在这个主线程中被解释和执行。

  • 相关阅读:
    VUE + 小程序 关于前端循环上传附件页面卡死的问题
    老黄自己卷自己!GPU要一年更新一代!预告新动作:AI工厂将吞噬一切
    k8s的service自动发现服务:实战版
    C#的LINQ select查询、where过滤、group分组、join关联
    阿基米德优化算法(Matlab代码实现)
    Nginx入门+实战
    Python XlsxWriter创建xlsx格式的Excel文件
    vue2中vant适配-把px都换算成rem
    C. Random Events(思维+概率)
    C++11之线程库(Thread、Mutex、atomic、lock_guard、同步)
  • 原文地址:https://blog.csdn.net/weixin_57198749/article/details/126160619