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

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

@[toc]

创建目录

在这里插入图片描述

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

makedirs('tmp/python/fileop'exist_ok=True
AI 代码解读

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

删除文件或目录

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

os.remove'sdf.py'
AI 代码解读

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

rmtree('tmp'ignore_errors=True
AI 代码解读

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

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

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

副本目录

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

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

请注意,复制前目标目录不得存在,否则将报告错误。
在执行上述代码之前,如果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')
AI 代码解读

对文件路径名的操作

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

进程和线程的概念

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

fee = input('请输入午餐费用:')
members = input('请输入聚餐人姓名,以英文逗号,分隔:')

# 将人员放入一个列表
memberlist = members.split(',') 
# 得到人数
headcount = len(memberlist) 

# 计算人均费用
avgfee = int (fee) / headcount
print(avgfee)
AI 代码解读

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

目录
打赏
0
0
0
0
154
分享
相关文章
【Linux进程概念】—— 操作系统中的“生命体”,计算机里的“多线程”
在计算机系统的底层架构中,操作系统肩负着资源管理与任务调度的重任。当我们启动各类应用程序时,其背后复杂的运作机制便悄然展开。程序,作为静态的指令集合,如何在系统中实现动态执行?本文带你一探究竟!
【Linux进程概念】—— 操作系统中的“生命体”,计算机里的“多线程”
解锁文件共享软件背后基于 Python 的二叉搜索树算法密码
文件共享软件在数字化时代扮演着连接全球用户、促进知识与数据交流的重要角色。二叉搜索树作为一种高效的数据结构,通过有序存储和快速检索文件,极大提升了文件共享平台的性能。它依据文件名或时间戳等关键属性排序,支持高效插入、删除和查找操作,显著优化用户体验。本文还展示了用Python实现的简单二叉搜索树代码,帮助理解其工作原理,并展望了该算法在分布式计算和机器学习领域的未来应用前景。
|
12天前
|
使用Python实现multipart/form-data文件接收的http服务器
至此,使用Python实现一个可以接收 'multipart/form-data' 文件的HTTP服务器的步骤就讲解完毕了。希望通过我的讲解,你可以更好地理解其中的逻辑,另外,你也可以尝试在实际项目中运用这方面的知识。
109 69
探秘文件共享服务之哈希表助力 Python 算法实现
在数字化时代,文件共享服务不可或缺。哈希表(散列表)通过键值对存储数据,利用哈希函数将键映射到特定位置,极大提升文件上传、下载和搜索效率。例如,在大型文件共享平台中,文件名等信息作为键,物理地址作为值存入哈希表,用户检索时快速定位文件,减少遍历时间。此外,哈希表还用于文件一致性校验,确保传输文件未被篡改。以Python代码示例展示基于哈希表的文件索引实现,模拟文件共享服务的文件索引构建与检索功能。哈希表及其分布式变体如一致性哈希算法,保障文件均匀分布和负载均衡,持续优化文件共享服务性能。
【Linux】进程IO|系统调用|open|write|文件描述符fd|封装|理解一切皆文件
本文详细介绍了Linux中的进程IO与系统调用,包括 `open`、`write`、`read`和 `close`函数及其用法,解释了文件描述符(fd)的概念,并深入探讨了Linux中的“一切皆文件”思想。这种设计极大地简化了系统编程,使得处理不同类型的IO设备变得更加一致和简单。通过本文的学习,您应该能够更好地理解和应用Linux中的进程IO操作,提高系统编程的效率和能力。
119 34
Python GIL(全局解释器锁)机制对多线程性能影响的深度分析
在Python开发中,GIL(全局解释器锁)一直备受关注。本文基于CPython解释器,探讨GIL的技术本质及其对程序性能的影响。GIL确保同一时刻只有一个线程执行代码,以保护内存管理的安全性,但也限制了多线程并行计算的效率。文章分析了GIL的必要性、局限性,并介绍了多进程、异步编程等替代方案。尽管Python 3.13计划移除GIL,但该特性至少要到2028年才会默认禁用,因此理解GIL仍至关重要。
262 16
Python GIL(全局解释器锁)机制对多线程性能影响的深度分析
|
2月前
|
python3多线程中使用线程睡眠
本文详细介绍了Python3多线程编程中使用线程睡眠的基本方法和应用场景。通过 `time.sleep()`函数,可以使线程暂停执行一段指定的时间,从而控制线程的执行节奏。通过实际示例演示了如何在多线程中使用线程睡眠来实现计数器和下载器功能。希望本文能帮助您更好地理解和应用Python多线程编程,提高程序的并发能力和执行效率。
79 20
Python中的Paramiko与FTP文件夹及文件检测技巧
通过使用 Paramiko 和 FTP 库,开发者可以方便地检测远程服务器上的文件和文件夹是否存在。Paramiko 提供了通过 SSH 协议进行远程文件管理的能力,而 `ftplib` 则提供了通过 FTP 协议进行文件传输和管理的功能。通过理解和应用这些工具,您可以更加高效地管理和监控远程服务器上的文件系统。
81 20
Python实用技巧:轻松驾驭多线程与多进程,加速任务执行
在Python编程中,多线程和多进程是提升程序效率的关键工具。多线程适用于I/O密集型任务,如文件读写、网络请求;多进程则适合CPU密集型任务,如科学计算、图像处理。本文详细介绍这两种并发编程方式的基本用法及应用场景,并通过实例代码展示如何使用threading、multiprocessing模块及线程池、进程池来优化程序性能。结合实际案例,帮助读者掌握并发编程技巧,提高程序执行速度和资源利用率。
68 0
Python网络编程基础(Socket编程)多线程/多进程服务器编程
【4月更文挑战第11天】在网络编程中,随着客户端数量的增加,服务器的处理能力成为了一个重要的考量因素。为了处理多个客户端的并发请求,我们通常需要采用多线程或多进程的方式。在本章中,我们将探讨多线程/多进程服务器编程的概念,并通过一个多线程服务器的示例来演示其实现。