Maison >développement back-end >Tutoriel Python >Résumé des dix opérations sur les fichiers les plus couramment utilisées en Python
Tutoriel PythonPrésente les dix principales opérations sur les fichiers courantes, pleines d'informations utiles~~
Recommandé (gratuit) : Tutoriel Python (vidéo)
Il existe de nombreux besoins quotidiens en matière de traitement par lots de fichiers. L'écriture de scripts en Python peut être très pratique, mais dans ce processus, vous devrez inévitablement traiter des documents. Pour la première fois, il y aura beaucoup de documents avec lesquels vous n'aurez aucun moyen de commencer, vous ne pourrez donc vous rendre qu'à Du Niang.
Dans cet article, Dongge a trié les 10 opérations sur les fichiers les plus couramment utilisées en Python, qui sont utilisées à la fois dans le traitement par lots et dans la lecture de fichiers. Je pense que cette revue sera utile.
1. Afficher le répertoire actuel
Quand on veut savoir quel est le répertoire de travail actuel, on peut simplement utiliser la fonction os
du getcwd()
module , ou utilisez pathlib
de cwd()
comme indiqué ci-dessous.
>>> # 第一种方法:显示当前目录 ... 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
Si vous utilisez une ancienne version de Python (2. Créer un nouveau répertoire
Pour créer un répertoire, vous pouvez utiliser la fonction
os
du modulemkdir()
. Cette fonction créera un répertoire sous le chemin spécifié, si seul le nom du répertoire est utilisé, un dossier sera créé dans le répertoire courant, c'est-à-dire le concept de chemins absolus et de chemins relatifs.>>> # 在当前文件夹创建新目录 ... 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')) ... 目录是否存在: TrueCependant, si vous souhaitez créer un répertoire à plusieurs niveaux, comme un dossier sous un dossier), vous devez utiliser cette
makedirs()
fonction.>>> # 创建包含子目录的目录 ... os.makedirs('tmp_level0/tmp_level1') ... print("目录是否存在:", os.path.exists("tmp_level0/tmp_level1")) ... Is the directory there: TrueSi vous utilisez la dernière version de Python (≥3.4), vous pouvez envisager d'utiliser le module
pathlib
pour créer un nouveau répertoire. Non seulement il peut créer des sous-répertoires, mais il peut également gérer les répertoires manquants dans le chemin.# 使用 pathlib from pathlib import Path Path("test_folder").mkdir(parents=True, exist_ok=True)Un problème à noter est que si vous essayez d'exécuter plusieurs fois certains des codes ci-dessus, vous risquez de rencontrer le problème "Impossible de créer un nouveau répertoire qui existe déjà." Nous pouvons gérer cela en définissant le paramètre
exist_ok
surTrue
(la valeur False par défaut nous empêchera de créer le répertoire).>>> # 使用 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. Supprimer les répertoires et les fichiers
Une fois que nous avons fini de travailler sur certains fichiers ou dossiers, nous souhaiterons peut-être les supprimer. Pour ce faire, nous pouvons utiliser la fonction
os
du moduleremove()
pour supprimer des fichiers. Si nous voulons supprimer un dossier, nous devrions utiliserrmdir()
à la place.>>> # 删除一个文件 ... 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 * 删除文件夹后 FalseSi vous utilisez le module
pathlib
, vous pouvez utiliser la méthodeunlink()
, et pour supprimer un répertoire, vous pouvez utiliser la méthodermdir()
. Notez que les deux méthodes sont des méthodes d’instance de l’objet Path.4. Obtenir la liste des fichiers
Lorsque nous analysons un certain travail ou un projet d'apprentissage automatique pour le traitement des données, nous devons obtenir la liste des fichiers dans un répertoire spécifique.
Habituellement, les noms de fichiers ont des modèles correspondants. Supposons que nous voulions trouver tous les fichiers .txt dans le répertoire, nous pouvons utiliser la méthode
glob()
de l'objet Path pour y parvenir. La méthodeglob()
crée un générateur qui nous permet d'itérer.>>> txt_files = list(Path('.').glob("*.txt")) ... print("Txt files:", txt_files) ... Txt files: [PosixPath('hello_world.txt'), PosixPath('hello.txt')]Alternativement, il est également pratique d'utiliser
glob模块
directement, comme indiqué ci-dessous, qui a des fonctionnalités similaires en créant une liste de noms de fichiers pouvant être utilisés. Dans la plupart des cas, comme pour la lecture et l'écriture de fichiers, les deux peuvent être utilisés.>>> from glob import glob ... files = list(glob('h*')) ... print("以h开头的文件:", files) ... Files starting with h: ['hello_world.txt', 'hello.txt']5. Déplacer et copier des fichiers
Déplacer des fichiers
L'une des tâches courantes de gestion de fichiers consiste à déplacer et à copier fichiers . En Python, ces tâches peuvent être effectuées très facilement. Pour déplacer un fichier, renommez simplement le fichier en remplaçant son ancien répertoire par le répertoire cible. Supposons que nous devions déplacer tous les fichiers .txt vers un autre dossier, utilisez
Path
pour y parvenir ci-dessous.>>> 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 目标文件存在: TrueCopie de fichiers
Nous pouvons utiliser les fonctions disponibles dans le module
_shutil_
, le module _shutil_ est un autre module utile dans la bibliothèque standard pour les opérations sur les fichiers. Nous pouvonscopy()
utiliser cette fonction dans un module en spécifiant les fichiers source et destination sous forme de chaînes. Un exemple simple est présenté ci-dessous. Bien sûr, vous pouvez combiner la fonctioncopy()
avec la fonctionglob()
pour traiter un tas de fichiers avec le même modèle.>>> 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 * 复制后,文件存在: True6. Vérifier le répertoire/fichier
La méthode
exists()
a été utilisée dans l'exemple ci-dessus pour vérifier si un chemin spécifique existe. S'il existe, il renvoie True ; s'il n'existe pas, il renvoie False. Cette fonction est disponible dans les modulesos
etpathlib
, et leur utilisation respective est la suivante.# os 模块中 exists() 用法 os.path.exists('path_to_check') # pathlib 模块中 exists() 用法 Path('directory_path').exists()En utilisant
pathlib
nous pouvons également vérifier si le chemin est un répertoire ou un fichier.# 检查路径是否是目录 os.path.isdir('需要检查的路径') Path('需要检查的路径').is_dir() # 检查路径是否是文件 os.path.isfile('需要检查的路径') Path('需要检查的路径').is_file()7. Obtenir des informations sur le fichier
Nom du fichier
Lors du traitement des fichiers, dans de nombreux cas, il est nécessaire d'extraire le nom du fichier. Utiliser Path est très simple, vous pouvez afficher l'attribut name
path.name
sur l'objet Path. Si vous ne souhaitez pas ajouter de suffixe, vous pouvez vérifier l'attribut stempath.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_managementSuffixe du fichier
如果想单独提取文件的后缀,可查看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.32044178. 读取文件
最重要的文件操作之一就是从文件中读取数据。读取文件,最常规的方法是使用内置
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()
函数,将模式改为w
或a
打开文件来创建文件对象。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
等库来完成一些操作。
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!