我想将“ temp”文件夹的内容移动到主文件夹,其中包含2个文件夹和1个文件的示例:
1. Hello
2. World
3. python.exe
在temp
文件夹中,我有完全相同的内容。我想先删除main
文件夹的内容,然后将内容从temp
文件夹移到main
文件夹,该文件夹应该为空,因为我删除了所有文件和文件夹,对?
问题是os.rmdir
和os.remove
并没有删除所有文件...它可能会删除4个文件中的2个文件和2个文件夹中的1个。我没有获得任何权限错误我只得到shutil错误,说目标路径已经存在(请注意,os.rmdir()
出于某种原因未将其删除)。
Traceback (most recent call last):
File "C:/Users/Test/Desktop/test_folder/ftpdl.py", line 346, in run
shutil.move(os.getcwd() + "\\temp\\" + f, os.getcwd())
File "C:\Python\lib\shutil.py", line 564, in move
raise Error("Destination path '%s' already exists" % real_dst)
shutil.Error: Destination path 'C:\Users\Test\Desktop\test_folder\Mono' already exists
我的代码如下:
dircontents = os.listdir(os.getcwd())
for file in dircontents:
if file == os.path.isfile(os.getcwd() + "\\" + file):
if file != 'testfile.py' and file != 'logo.ico' and file != 'settings.xml' and file != 'settings_backup.xml':
os.remove(os.getcwd() + "\\" + file)
break
if file == os.path.isdir(os.getcwd() + "\\" + file):
if file != 'temp':
os.rmdir(os.getcwd() + "\\" + file)
break
newfiles = os.listdir(os.getcwd() + "\\temp")
for f in newfiles:
shutil.move(os.getcwd() + "\\temp\\" + f, os.getcwd())
预期结果是主文件夹中的所有旧内容都将被删除,而temp文件夹中的新内容将被移至主文件夹中,但这是行不通的。我会说它正在部分工作。
答案 0 :(得分:1)
这是不正确的:
if file == os.path.isfile(os.getcwd() + "\\" + file):
isfile()
返回True
或False
,而不返回文件名。您应该只测试调用的结果,而不要将其与文件名进行比较。
也不需要在os.getcwd()
前面加上-相对路径名始终相对于当前目录进行解释。同样,os.listdir()
默认为当前目录。
应该是:
if os.path.isfile(file):
而且您不应该拥有break
,这会使循环在删除第一件事后停止。
并使用elif
进行第二次测试,因为这两种情况是互斥的。
dircontents = os.listdir()
for file in dircontents:
if os.path.isfile(file) and file not in ['testfile.py', 'logo.ico', 'settings.xml', 'settings_backup.xml']:
os.remove(file)
elif os.path.isdir(file) and file != 'temp':
os.rmdir(file)
newfiles = os.listdir("temp")
for f in newfiles:
shutil.move("temp\\" + f, os.getcwd())