在上一教程中 ,我讨论了如何读取,打开,关闭和写入文件。 在本教程中,我将进一步讨论可以对文件和目录(文件夹)执行的不同操作。
您知道,例如,我们经常使用文件,而处理文件不仅仅只是打开和关闭文件。 您还记得您复制了该特定文件多少次吗? 哦,还是当您重命名从某个网站下载的文件时,因为该文件的名称没有意义? 这些是我将在本教程中讨论的一些操作类型。
准备? 接下来,让我们开始使用Python,对我们的文件和目录做一些有趣的事情!
关闭
shutil
(Shell Utilities)是我们将在本教程中用来执行不同文件和目录操作的模块的名称。 shutil
已经随您的Python安装一起提供,因此您无需手动安装它。 为了使用此模块,您需要做的就是import
模块:
import shutil
复制文件
让我们从第一个操作开始,即复制文件 。 为此,我们将使用shutil
模块中的copy()
函数。 在本教程的示例中,我将使用sample.pdf文件。 您可以随意下载此文件或使用任何喜欢的文件。
以下简单脚本将向您展示如何将sample.pdf
从桌面(最初位于该位置)复制到另一个目录Temp
,该目录也位于桌面上:
import shutil
shutil.copy('sample.pdf', 'Temp')
注意,我只列出了文件名和目录名,因为我在使用终端作为桌面时使用的是我的终端。 您可以改为指定要复制的文件和要将文件复制到的目录的完整路径,在我的情况下如下所示:
shutil.copy('/Users/Abder/Desktop/sample.pdf', '/Users/Abder/Desktop/Temp')
继续,打开Temp
目录或您指定的任何目录,您应该在其中找到复制的文件!
如果第二个参数是文件而不是目录怎么办? 换句话说,假设您键入了以下内容(假设文件和文件都在桌面上,则删除了文件的完整路径):
import shutil
shutil.copy('sample.pdf', 'file.pdf')
在这种情况下,您将拥有一个新文件file.pdf
,它是原始文件sample.pdf
的副本。 因此,如果您打开file.pdf
,您会发现它具有相同的内容,因为它实际上是sample.pdf
的副本。
来源和目的地可以相同吗? 让我们尝试看看。
shutil.copy('sample.pdf', 'sample.pdf'
)
似乎此操作将给我们带来一个错误,因为文件名不应该相同:
Traceback (most recent call last):
File "test.py", line 2, in <module>
shutil.copy('sample.pdf', 'sample.pdf')
File "/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 119, in copy
copyfile(src, dst)
File "/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 69, in copyfile
raise Error("`%s` and `%s` are the same file" % (src, dst))
shutil.Error: `sample.pdf` and `sample.pdf` are the same file
复制目录
在本节中,我们将看到如何复制整个目录(文件夹)而不是单个文件,如上一节所述。
假设我们要复制以下目录结构。 也就是说,我们有一个主目录Original
,其中包含目录Original-1
,其中包含目录Original-2
,并且包含目录Original-3
,在Original-3
我们具有文件Sample.pdf
(phew。 ..)。
现在,我们要做的就是将Original
目录及其所有内容复制到一个新目录,然后将该新目录称为Original-Copy
。
可以使用copytree()
函数简单地完成此操作,如下所示(假设一切都在桌面上发生):
import shutil
shutil.copytree('Original', 'Original-Copy')
现在你应该找一个新的目录Original-Copy
与所有的内容和结构Original
。
移动文件
移动文件就像对文件进行剪切粘贴操作一样。 在“ 复制文件”部分中,我们了解了如何制作文件副本,同时将原始文件保留在其原始位置。
在本节中,我们将看到如何将文件移动(剪切)到新位置,同时将其从其原始位置删除。 只需使用move()
函数即可执行此操作,如下所示:
import shutil
shutil.move('Sample.pdf', 'Temp')
请注意, Sample.pdf
已移动到目录Temp
,并且在桌面上不再存在。
如果我们将Sample.pdf
移至新文件 New-Sample.pdf
,该怎么办?
import shutil
shutil.move('Sample.pdf', 'New-Sample.pdf')
在这种情况下,您将仅拥有New-Sample.pdf
内容相同的New-Sample.pdf
Sample.pdf
,但Sample.pdf
不再存在。
移动目录
使用我们在“ 移动文件”部分中使用的相同功能,即move()
来执行移动目录。 让我们使用与“ 复制目录”部分中相同的示例,但是现在使用move()
函数。
import shutil
shutil.move('Original', 'Original-Copy')
在这种情况下,您将拥有一个新目录Original-Copy
,其内容与Original
相同,但Original
不再存在。
重命名文件和目录
你猜怎么了? 您还可以使用move()
函数来重命名文件或目录。 在本节中,我将不再重复这些示例。 但是,如果您在上述文件和目录上同时使用move()
函数时注意到,我们提到原始文件/目录不再存在,但是存在具有相同内容的新文件/目录。 这就像重命名文件/目录,不是吗?
删除文件和目录
似乎shutil
模块不包含删除文件的功能。 但是,它确实包含删除目录的功能: rmtree()
。 请注意,因为删除是永久性的,因此您不会在垃圾箱中找到已删除的目录。
以下示例说明了如何永久删除Original-Copy
目录:
import shutil
shutil.rmtree('Original-Copy')
如果要永久删除文件 ,可以使用Python的os
模块中的remove()
函数,如下所示:
import os
os.remove('Sample.pdf')
结论
如您所见,我们能够通过shutil和os模块非常轻松地对文件和目录执行重要的操作-复制,移动,重命名和删除。 您可以查阅这些模块的文档,以获取有关如何使用它们的更多信息。
翻译自: https://code.tutsplus.com/tutorials/file-and-directory-operations-using-python--cms-25817