写点什么

开源一夏 | 文件和目录操作|多进程和多线程【python 进阶篇】

作者:黎燃
  • 2022 年 8 月 04 日
  • 本文字数:1792 字

    阅读完需:约 6 分钟

开源一夏 | 文件和目录操作|多进程和多线程【python进阶篇】

创建目录


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


makedirs('tmp/python/fileop',exist_ok=True)
复制代码


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

删除文件或目录

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


os.remove('sdf.py')
复制代码


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


rmtree('tmp',ignore_errors=True)
复制代码


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


#将d:/tools/first Py复制到e:/first.Pycopyfile('d:/tools/first.py'、'e:/first.py')
复制代码


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

副本目录

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


#将d:/tools/aaa目录中的所有内容复制到e:/bbbcopytree('d:/tools/aaa'、'e:/new/bbb')
复制代码


请注意,复制前目标目录不得存在,否则将报告错误。在执行上述代码之前,如果 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/bbbos.rename('d:/tools/aaa','d:/tools/bbb')
# 修改文件名 d:/tools/first.py 为 d:/tools/second.pyos.rename('d:/tools/first.py','d:/tools/second.py')
复制代码

对文件路径名的操作

对于文件名操作,如获取文件名、文件所在的目录以及文件路径的拼接,可以使用 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'
复制代码

进程和线程的概念

我经常被问及过程和线程之间的区别。简单地说:进程是一个正在运行的程序。我们编写的 python 程序(或其他应用程序,如画笔、QQ 等)在运行时称为进程打开 windows 下的任务管理器,其中显示当前系统上运行的进程。



例如,在以下程序运行后,只有一个线程,即主线程。在主线程中,代码按顺序执行,主线程退出,直到执行结束。与此同时,这一进程已经结束。


fee = input('请输入午餐费用:')members = input('请输入聚餐人姓名,以英文逗号,分隔:')
# 将人员放入一个列表memberlist = members.split(',') # 得到人数headcount = len(memberlist)
# 计算人均费用avgfee = int (fee) / headcountprint(avgfee)
复制代码


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

发布于: 刚刚阅读数: 3
用户头像

黎燃

关注

前端工程师 2022.05.06 加入

专注学习分享前端知识。

评论

发布
暂无评论
开源一夏 | 文件和目录操作|多进程和多线程【python进阶篇】_开源_黎燃_InfoQ写作社区