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

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

@[toc]

创建目录

在这里插入图片描述

操作系统。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.Py
copyfile('d:/tools/first.py'、'e:/first.py')

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

副本目录

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

#将d:/tools/aaa目录中的所有内容复制到e:/bbb
copytree('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/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')

对文件路径名的操作

对于文件名操作,如获取文件名、文件所在的目录以及文件路径的拼接,可以使用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) / headcount
print(avgfee)

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

相关文章
|
数据可视化 Linux iOS开发
Python脚本转EXE文件实战指南:从原理到操作全解析
本教程详解如何将Python脚本打包为EXE文件,涵盖PyInstaller、auto-py-to-exe和cx_Freeze三种工具,包含实战案例与常见问题解决方案,助你轻松发布独立运行的Python程序。
2687 2
|
监控 机器人 编译器
如何将python代码打包成exe文件---PyInstaller打包之神
PyInstaller可将Python程序打包为独立可执行文件,无需用户安装Python环境。它自动分析代码依赖,整合解释器、库及资源,支持一键生成exe,方便分发。使用pip安装后,通过简单命令即可完成打包,适合各类项目部署。
2035 68
|
Java 测试技术 API
【JUC】(1)带你重新认识进程与线程!!让你深层次了解线程运行的睡眠与打断!!
JUC是什么?你可以说它就是研究Java方面的并发过程。本篇是JUC专栏的第一章!带你了解并行与并发、线程与程序、线程的启动与休眠、打断和等待!全是干货!快快快!
1340 2
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
628 1
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
559 1
|
Python
使用Python实现multipart/form-data文件接收的http服务器
至此,使用Python实现一个可以接收 'multipart/form-data' 文件的HTTP服务器的步骤就讲解完毕了。希望通过我的讲解,你可以更好地理解其中的逻辑,另外,你也可以尝试在实际项目中运用这方面的知识。
793 69
|
并行计算 Linux
Linux内核中的线程和进程实现详解
了解进程和线程如何工作,可以帮助我们更好地编写程序,充分利用多核CPU,实现并行计算,提高系统的响应速度和计算效能。记住,适当平衡进程和线程的使用,既要拥有独立空间的'兄弟',也需要在'家庭'中分享和并行的成员。对于这个世界,现在,你应该有一个全新的认识。
544 67
|
编译器 Python
如何利用Python批量重命名PDF文件
本文介绍了如何使用Python提取PDF内容并用于文件重命名。通过安装Python环境、PyCharm编译器及Jupyter Notebook,结合tabula库实现PDF数据读取与处理,并提供代码示例与参考文献。
|
编译器 Python
如何利用Python批量重命名文件
本文介绍了如何使用Python和PyCharm对文件进行批量重命名,包括文件名前后互换、按特定字符调整顺序等实用技巧,并提供了完整代码示例。同时推荐了第三方工具Bulk Rename Utility,便于无需编程实现高效重命名。适用于需要处理大量文件命名的场景,提升工作效率。
|
编解码 Prometheus Java
当Python同时操作1000个文件时,为什么你的CPU只用了10%?
本文介绍如何构建一个高效的文件处理系统,解决单线程效率低、多线程易崩溃的矛盾。通过异步队列与多线程池结合,实现任务调度优化,提升I/O密集型操作的性能。
396 4

推荐镜像

更多