【发布时间】:2018-09-12 18:14:01
【问题描述】:
I have the following directory structure:
-mailDir
-folderA
-sub1
-sub2
-inbox
-1.txt
-2.txt
-89.txt
-subInbox
-subInbox2
-folderB
-sub1
-sub2
-inbox
-1.txt
-2.txt
-200.txt
-577.txt
目的是将收件箱文件夹下的所有txt文件复制到另一个文件夹中。 为此,我尝试了以下代码
import os
from os import path
import shutil
rootDir = "mailDir"
destDir = "destFolder"
eachInboxFolderPath = []
for root, dirs, files in os.walk(rootDir):
for dirName in dirs:
if(dirName=="inbox"):
eachInboxFolderPath.append(root+"\\"+dirName)
for ii in eachInboxFolderPath:
for i in os.listdir(ii):
shutil.copy(path.join(ii,i),destDir)
如果收件箱目录只有 .txt 文件,那么上面的代码可以正常工作。由于文件夹A目录下的收件箱文件夹还有其他子目录以及.txt文件,因此代码返回权限被拒绝错误。我的理解是 shutil.copy 不允许复制文件夹。
目的是仅将每个收件箱文件夹中的 txt 文件复制到其他位置。如果不同收件箱文件夹中的文件名相同,我必须保留两个文件名。在这种情况下我们如何改进代码?请注意,除 .txt 之外的所有其他文件都只是文件夹。
【问题讨论】:
-
我建议使用
os.path.isfile或os.path.isdir函数来检查一个项目是否是一个目录/文件夹。然后,您可以避免尝试复制该文件夹。 docs.python.org/3.6/library/os.path.html -
这行得通。如果文件名相同,则在我必须保留这两个文件时它会被覆盖。我们如何做到这一点?
-
您必须重命名一个(或两个),因为(显然)两个同名文件不能同时存在于同一路径中。所以,我建议使用
shutil.copyfile而不是.copy。您需要首先检查目标文件夹中是否存在该文件。