Heim >Backend-Entwicklung >Python-Tutorial >Zusammenfassung der zehn am häufigsten verwendeten Dateioperationen in Python

Zusammenfassung der zehn am häufigsten verwendeten Dateioperationen in Python

coldplay.xixi
coldplay.xixinach vorne
2020-12-28 17:45:072785Durchsuche

Python-TutorialStellt die zehn häufigsten Dateivorgänge vor, voller nützlicher Informationen~~

Zusammenfassung der zehn am häufigsten verwendeten Dateioperationen in Python

Empfohlen (kostenlos): Python-Tutorial (Video)

Der tägliche Bedarf an Stapelverarbeitung Die Anzahl der Dateien ist sehr hoch. Das Schreiben von Skripten in Python kann sehr praktisch sein, aber Sie müssen sich dabei zwangsläufig mit Dateien befassen. Zum ersten Mal gibt es viele Dateioperationen, die Sie nicht starten können kann nur Du Niang finden.

In diesem Artikel hat Bruder Dong die 10 am häufigsten verwendeten Dateioperationen in Python zusammengestellt, die sowohl bei der Stapelverarbeitung als auch beim Lesen von Dateien verwendet werden.

1. Zeigt das aktuelle Verzeichnis an

Wenn wir wissen möchten, was das aktuelle Arbeitsverzeichnis ist, können wir einfach die Funktion getcwd() des os verwenden module oder verwenden Sie pathlibs cwd() wie unten gezeigt. 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
Wenn Sie eine ältere Version von Python (

2. Erstellen Sie ein neues Verzeichnis

Um ein Verzeichnis zu erstellen, können Sie die Funktion mkdir() des Moduls os verwenden. Diese Funktion erstellt ein Verzeichnis unter dem angegebenen Pfad. Wenn nur der Verzeichnisname verwendet wird, wird ein Ordner im aktuellen Verzeichnis erstellt, dh das Konzept von absoluten Pfaden und relativen Pfaden. 🎜
>>> file_path = Path('closures.py')
... print("文件后缀:", file_path.suffix)
... 
File Extension: .py
🎜Wenn Sie jedoch ein mehrstufiges Verzeichnis erstellen möchten, z. B. einen Ordner unter einem Ordner, müssen Sie die Funktion makedirs() verwenden. 🎜
>>> # 路径 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
🎜Wenn Sie die neueste Version von Python (≥3.4) verwenden, können Sie das Modul pathlib nutzen, um ein neues Verzeichnis zu erstellen. Es kann nicht nur Unterverzeichnisse erstellen, sondern auch alle fehlenden Verzeichnisse im Pfad verarbeiten. 🎜
>>> # 读取所有的文本
... 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!
🎜Ein zu beachtendes Problem ist, dass, wenn Sie versuchen, einige der oben genannten Codes mehrmals auszuführen, möglicherweise das Problem „Es kann kein neues Verzeichnis erstellt werden, das bereits existiert“ auftritt. Wir können damit umgehen, indem wir den Parameter exist_ok auf True setzen (der Standardwert False verhindert, dass wir das Verzeichnis erstellen). 🎜
>>> # 向文件中写入新数据
... 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
🎜🎜3. Verzeichnisse und Dateien löschen🎜🎜🎜Nachdem wir mit der Arbeit an einigen Dateien oder Ordnern fertig sind, möchten wir sie möglicherweise löschen. Dazu können wir die Funktion remove() im Modul os verwenden, um die Datei zu löschen. Wenn wir einen Ordner löschen möchten, sollten wir stattdessen rmdir() verwenden. 🎜
>>> 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 到压缩文件
🎜Wenn Sie das Modul pathlib verwenden, können Sie die Methode unlink() verwenden, und zum Löschen eines Verzeichnisses können Sie die Methode rmdir()-Methode. Beachten Sie, dass beide Methoden Instanzmethoden des Path-Objekts sind. 🎜🎜🎜4. Holen Sie sich die Dateiliste🎜🎜🎜Wenn wir einen bestimmten Job oder ein maschinelles Lernprojekt für die Datenverarbeitung analysieren, müssen wir die Dateiliste in einem bestimmten Verzeichnis abrufen. 🎜🎜Normalerweise haben Dateinamen übereinstimmende Muster. Angenommen, wir möchten alle TXT-Dateien im Verzeichnis finden. Dazu können wir die Methode <code>glob() des Path-Objekts verwenden. Die Methode glob() erstellt einen Generator, der es uns ermöglicht, zu iterieren. 🎜
>>> # 解压缩文件
... 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
🎜 Alternativ ist es auch bequem, das glob-Modul direkt zu verwenden, wie unten gezeigt, das über eine ähnliche Funktionalität verfügt, indem es eine Liste verwendbarer Dateinamen erstellt. In den meisten Fällen, beispielsweise beim Lesen und Schreiben von Dateien, können beide verwendet werden. 🎜rrreee🎜🎜5. Dateien verschieben und kopieren 🎜🎜🎜🎜Dateien verschieben🎜🎜🎜Eine der regelmäßigen Dateiverwaltungsaufgaben ist das Verschieben und Kopieren von Dateien. In Python können diese Aufgaben sehr einfach erledigt werden. Um eine Datei zu verschieben, benennen Sie die Datei einfach um, indem Sie ihr altes Verzeichnis durch das Zielverzeichnis ersetzen. Angenommen, wir müssen alle TXT-Dateien in einen anderen Ordner verschieben. Verwenden Sie dazu Pfad. 🎜rrreee🎜🎜Dateien kopieren🎜🎜🎜Wir können die im Modul _shutil_ verfügbaren Funktionen nutzen, einem weiteren nützlichen Modul in der Standardbibliothek für Dateioperationen. Wir können diese Funktion in einem Modul verwenden, indem wir die Quell- und Zieldateien als Zeichenfolgen angeben. Ein einfaches Beispiel ist unten dargestellt. Natürlich können Sie die Funktion copy() in Verbindung mit der Funktion glob() verwenden, um eine Reihe von Dateien mit demselben Muster zu verarbeiten. 🎜rrreee🎜🎜6. Verzeichnis/Datei prüfen 🎜🎜🎜Im obigen Beispiel wurde die Methode exists() verwendet, um zu überprüfen, ob ein bestimmter Pfad vorhanden ist. Wenn es existiert, wird „True“ zurückgegeben; wenn es nicht existiert, wird „False“ zurückgegeben. Diese Funktion ist sowohl in den Modulen os als auch pathlib verfügbar und wird wie folgt verwendet. 🎜rrreee🎜Mit pathlib können wir auch prüfen, ob der Pfad ein Verzeichnis oder eine Datei ist. 🎜rrreee🎜🎜7. Dateiinformationen abrufen🎜🎜🎜🎜Dateiname🎜🎜🎜Bei der Verarbeitung von Dateien ist es in vielen Fällen erforderlich, den Dateinamen zu extrahieren. Die Verwendung von Path ist sehr einfach. Sie können das Namensattribut path.name für das Path-Objekt anzeigen. Wenn Sie kein Suffix hinzufügen möchten, können Sie das Stammattribut path.stem anzeigen. 🎜rrreee🎜🎜Dateisuffix🎜🎜

如果想单独提取文件的后缀,可查看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等库来完成一些操作。

Das obige ist der detaillierte Inhalt vonZusammenfassung der zehn am häufigsten verwendeten Dateioperationen in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen