搜索
首页后端开发Python教程总结 Python十大常用文件操作

Python教程介绍十大常用文件操作,干货满满~~

总结 Python十大常用文件操作

推荐(免费):Python教程(视频)

日常对于批量处理文件的需求非常多,用Python写脚本可以非常方便地实现,但在这过程中难免会和文件打交道,第一次做会有很多文件的操作无从下手,只能找度娘。

本篇东哥整理了10个Python中最常用到的文件操作,无论是批处理还是读取文件都会用到,相信这个梳理会有所帮助。

1. 显示当前目录

当我们想知道当前的工作目录是什么的时候,我们可以简单地使用os模块的getcwd()功能,或者使用pathlibcwd(),如下所示。

>>> # 第一种方法:显示当前目录
... import os
... print("当前工作目录:", os.getcwd())
... 
Current Work Directory: /Users/ycui1/PycharmProjects/Medium_Python_Tutorials

>>> # 第二种方法:或者我们也可以使用 pathlib
... from pathlib import Path
... print("当前工作目录:", Path.cwd())
... 
Current Work Directory: /Users/ycui1/PycharmProjects/Medium_Python_Tutorials
如果使用的是旧版本的Python(<3.4),则必须使用该os模块。

2. 建立一个新目录

要创建目录,可以使用os模块的mkdir()功能。该函数将在指定的路径下创建目录,如果仅使用目录名称,则将在当前目录中创建文件夹,即绝对路径和相对路径的概念。

>>> # 在当前文件夹创建新目录
... os.mkdir("test_folder")
... print("目录是否存在:", os.path.exists("test_folder"))
... 
目录是否存在: True
>>> # 在特定文件夹创建新目录
... os.mkdir('/Users/ycui1/PycharmProjects/tmp_folder')
... print("目录是否存在:", os.path.exists('/Users/ycui1/PycharmProjects/tmp_folder'))
... 
目录是否存在: True<p>但是,如果想要建立一个多层级的目录,比如文件夹中下的文件夹),则需要使用该<code>makedirs()</code>功能。</p>
<pre class="brush:php;toolbar:false">>>> # 创建包含子目录的目录
... os.makedirs('tmp_level0/tmp_level1')
... print("目录是否存在:", os.path.exists("tmp_level0/tmp_level1"))
... 
Is the directory there: True

如果使用最新版本的Python(≥3.4),则可以考虑利用pathlib模块创建新目录。它不仅可以创建子目录,而且可以处理路径中所有丢失的目录。

# 使用 pathlib
from pathlib import Path
Path("test_folder").mkdir(parents=True, exist_ok=True)

需要注意一个问题,如果尝试多次运行上述某些代码,可能会遇到问题“无法创建已经存在的新目录”。我们可以将exist_ok参设置为True来处理此问题(默认值False值将阻止我们创建目录)。

>>> # 使用 pathlib
... from pathlib import Path
... Path("test_folder").mkdir(parents=True, exist_ok=False)
... 
Traceback (most recent call last):
  File "<input>", line 3, in <module>
  File "/Users/ycui1/.conda/envs/Medium/lib/python3.8/pathlib.py", line 1284, in mkdir
    self._accessor.mkdir(self, mode)
FileExistsError: [Errno 17] File exists: 'test_folder'

3. 删除目录和文件

完成对某些文件或文件夹的操作后,我们可能希望删除它。为此,我们可以使用os模块中的remove()函数来删除文件。如果要删除文件夹,我们应该改用rmdir()

>>> # 删除一个文件
... print(f"* 删除文件前 {os.path.isfile('tmp.txt')}")
... os.remove('tmp.txt')
... print(f"* 删除文件后 {os.path.exists('tmp.txt')}")
... 
* 删除文件前 True
* 删除文件后 False
>>> # 删除一个文件夹
... print(f"* 删除文件夹前 {os.path.isdir('tmp_folder')}")
... os.rmdir('tmp_folder')
... print(f"* 删除文件夹后 {os.path.exists('tmp_folder')}")
... 
* 删除文件夹前 True
* 删除文件夹后 False

如果使用pathlib模块,可以使用unlink()方法,而删除目录可以使用rmdir()方法。请注意,这两种方法都是Path对象的实例方法。

4. 获取文件列表

当我们分析某个工作或机器学习项目进行数据处理时,需要获取特定目录中的文件列表。

通常,文件名具有匹配的模式。假设我们要查找目录中的所有.txt文件,可使用Path对象的方法glob()来实现。glob()方法创建了一个生成器,允许我们进行迭代。

>>> txt_files = list(Path('.').glob("*.txt"))
... print("Txt files:", txt_files)
... 
Txt files: [PosixPath('hello_world.txt'), PosixPath('hello.txt')]

另外,直接使用glob模块也很方便,如下所示,通过创建可以使用的文件名列表,它具有相似的功能。在大多数情况下,例如文件读取和写入,两者都可以使用。

>>> from glob import glob
... files = list(glob('h*'))
... print("以h开头的文件:", files)
... 
Files starting with h: ['hello_world.txt', 'hello.txt']

5. 移动和复制文件

移动文件

常规文件管理任务之一是移动和复制文件。在Python中,这些工作可以非常轻松地完成。要移动文件,只需将其旧目录替换为目标目录即可重命名该文件。假设我们需要将所有.txt文件移动到另一个文件夹,下面用Path来实现。

>>> target_folder = Path("目标文件")
... target_folder.mkdir(parents=True,exist_ok=True)
... source_folder = Path('.')
... 
... txt_files = source_folder.glob('*.txt')
... for txt_file in txt_files:
...     filename = txt_file.name
...     target_path = target_folder.joinpath(filename)
...     print(f"** 移动文件 {filename}")
...     print("目标文件存在:", target_path.exists())
...     txt_file.rename(target_path)
...     print("目标文件存在:", target_path.exists(), '\n')
... 
** 移动文件 hello_world.txt
目标文件存在: False
目标文件存在: True 

** 移动文件 hello.txt
目标文件存在: False
目标文件存在: True

复制文件

我们可以利用_shutil_模块中可用的功能,_shutil_模块是标准库中另一个用于文件操作的有用模块。我们可以copy()通过将源文件和目标文件指定为字符串来在模块中使用该函数。一个简单的例子如下所示。当然,您可以将copy()函数与glob()函数结合使用,以处理具有相同模式的一堆文件。

>>> import shutil
... 
... source_file = "target_folder/hello.txt"
... target_file = "hello2.txt"
... target_file_path = Path(target_file)
... print("* 复制前,文件存在:", target_file_path.exists())
... shutil.copy(source_file, target_file)
... print("* 复制后,文件存在:", target_file_path.exists())
... 
* 复制前,文件存在: False
* 复制后,文件存在: True

6. 检查目录/文件

上面的示例中一直在使用exists()方法来检查是否存在特定路径。如果存在,返回True;如果不存在,则返回False。此功能在ospathlib模块中均可用,各自的用法如下。

# os 模块中 exists() 用法
os.path.exists('path_to_check')

# pathlib 模块中 exists() 用法
Path('directory_path').exists()

使用pathlib,我们还可以检查路径是目录还是文件。

# 检查路径是否是目录
os.path.isdir('需要检查的路径')
Path('需要检查的路径').is_dir()

# 检查路径是否是文件
os.path.isfile('需要检查的路径')
Path('需要检查的路径').is_file()

7. 获取文件信息

文件名称

处理文件时,许多情况下都需要提取文件名。使用Path非常简单,可以在Path对象上查看name属性path.name。如果不想带后缀,可以查看stem属性path.stem

for py_file in Path().glob('c*.py'):
...     print('Name with extension:', py_file.name)
...     print('Name only:', py_file.stem)
... 
带文件后缀: closures.py
只有文件名: closures
带文件后缀: counter.py
只有文件名: counter
带文件后缀: context_management.py
只有文件名: context_management

文件后缀

如果想单独提取文件的后缀,可查看Path对象的suffix属性。

>>> file_path = Path('closures.py')
... print("文件后缀:", file_path.suffix)
... 
File Extension: .py

文件更多信息

如果要获取有关文件的更多信息,例如文件大小和修改时间,则可以使用该stat()方法,该方法和os.stat()一样。

>>> # 路径 path 对象
... current_file_path = Path('iterable_usages.py')
... file_stat = current_file_path.stat()
... 
>>> # 获取文件大小:
... print("文件大小(Bytes):", file_stat.st_size)
文件大小(Bytes): 3531
>>> # 获取最近访问时间
... print("最近访问时间:", file_stat.st_atime)
最近访问时间: 1595435202.310935
>>> # 获取最近修改时间
... print("最近修改时间:", file_stat.st_mtime)
最近修改时间: 1594127561.3204417

8. 读取文件

最重要的文件操作之一就是从文件中读取数据。读取文件,最常规的方法是使用内置open()函数创建文件对象。默认情况下,该函数将以读取模式打开文件,并将文件中的数据视为文本。

>>> # 读取所有的文本
... with open("hello2.txt", 'r') as file:
...     print(file.read())
... 
Hello World!
Hello Python!
>>> # 逐行的读取
... with open("hello2.txt", 'r') as file:
...     for i, line in enumerate(file, 1):
...         print(f"* 读取行 #{i}: {line}") 
... 
* 读取行 #1: Hello World!

* 读取行 #2: Hello Python!

如果文件中没有太多数据,则可以使用该read()方法一次读取所有内容。但如果文件很大,则应考虑使用生成器,生成器可以逐行处理数据。

默认将文件内容视为文本。如果要使用二进制文件,则应明确指定用r还是rb

另一个棘手的问题是文件的编码。在正常情况下,open()处理编码使用utf-8编码,如果要使用其他编码处理文件,应设置encoding参数。

9. 写入文件

仍然使用open()函数,将模式改为wa打开文件来创建文件对象。w模式下会覆盖旧数据写入新数据,a模式下可在原有数据基础上增加新数据。

>>> # 向文件中写入新数据
... with open("hello3.txt", 'w') as file:
...     text_to_write = "Hello Files From Writing"
...     file.write(text_to_write)
... 
>>> # 增加一些数据
... with open("hello3.txt", 'a') as file:
...     text_to_write = "\nHello Files From Appending"
...     file.write(text_to_write)
... 
>>> # 检查文件数据是否正确
... with open("hello3.txt") as file:
...     print(file.read())
... 
Hello Files From Writing
Hello Files From Appending

上面每次打开文件时都使用with语句。

with语句为我们创建了一个处理文件的上下文,当我们完成文件操作后,它可以关闭文件对象。这点很重要,如果我们不及时关闭打开的文件对象,它很有可能会被损坏。

10. 压缩和解压缩文件

压缩文件

zipfile模块提供了文件压缩的功能。使用ZipFile()函数创建一个zip文件对象,类似于我们对open()函数所做的操作,两者都涉及创建由上下文管理器管理的文件对象。

>>> from zipfile import ZipFile
... 
... # 创建压缩文件
... with ZipFile('text_files.zip', 'w') as file:
...     for txt_file in Path().glob('*.txt'):
...         print(f"*添加文件: {txt_file.name} 到压缩文件")
...         file.write(txt_file)
... 
*添加文件: hello3.txt 到压缩文件
*添加文件: hello2.txt 到压缩文件

解压缩文件

>>> # 解压缩文件
... with ZipFile('text_files.zip') as zip_file:
...     zip_file.printdir()
...     zip_file.extractall()
... 
File Name                                             Modified             Size
hello3.txt                                     2020-07-30 20:29:50           51
hello2.txt                                     2020-07-30 18:29:52           26

结论

以上就是整理的Python常用文件操作,全部使用内置函数实现。当然,也可以借助比如pandas等库来完成一些操作。

以上是总结 Python十大常用文件操作的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文转载于:segmentfault。如有侵权,请联系admin@php.cn删除
详细讲解Python之Seaborn(数据可视化)详细讲解Python之Seaborn(数据可视化)Apr 21, 2022 pm 06:08 PM

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于Seaborn的相关问题,包括了数据可视化处理的散点图、折线图、条形图等等内容,下面一起来看一下,希望对大家有帮助。

详细了解Python进程池与进程锁详细了解Python进程池与进程锁May 10, 2022 pm 06:11 PM

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于进程池与进程锁的相关问题,包括进程池的创建模块,进程池函数等等内容,下面一起来看一下,希望对大家有帮助。

Python自动化实践之筛选简历Python自动化实践之筛选简历Jun 07, 2022 pm 06:59 PM

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于简历筛选的相关问题,包括了定义 ReadDoc 类用以读取 word 文件以及定义 search_word 函数用以筛选的相关内容,下面一起来看一下,希望对大家有帮助。

归纳总结Python标准库归纳总结Python标准库May 03, 2022 am 09:00 AM

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于标准库总结的相关问题,下面一起来看一下,希望对大家有帮助。

Python数据类型详解之字符串、数字Python数据类型详解之字符串、数字Apr 27, 2022 pm 07:27 PM

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于数据类型之字符串、数字的相关问题,下面一起来看一下,希望对大家有帮助。

分享10款高效的VSCode插件,总有一款能够惊艳到你!!分享10款高效的VSCode插件,总有一款能够惊艳到你!!Mar 09, 2021 am 10:15 AM

VS Code的确是一款非常热门、有强大用户基础的一款开发工具。本文给大家介绍一下10款高效、好用的插件,能够让原本单薄的VS Code如虎添翼,开发效率顿时提升到一个新的阶段。

详细介绍python的numpy模块详细介绍python的numpy模块May 19, 2022 am 11:43 AM

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于numpy模块的相关问题,Numpy是Numerical Python extensions的缩写,字面意思是Python数值计算扩展,下面一起来看一下,希望对大家有帮助。

python中文是什么意思python中文是什么意思Jun 24, 2019 pm 02:22 PM

pythn的中文意思是巨蟒、蟒蛇。1989年圣诞节期间,Guido van Rossum在家闲的没事干,为了跟朋友庆祝圣诞节,决定发明一种全新的脚本语言。他很喜欢一个肥皂剧叫Monty Python,所以便把这门语言叫做python。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。