问题描述
新的Python开发人员正在尝试处理我的第一个脚本。目标是编写一个应用程序,该应用程序可以根据文件类型将文件放在子文件夹中来清理我的下载文件夹。
这是我的代码:
import shutil
import os
directory = "/Users/Gustaf/downloads"
file_type_list = []
for filename in os.listdir("/Users/Gustaf/downloads"): #insert your downloads folder path
path = directory
file_type = os.path.splitext(filename)[1]
if file_type not in file_type_list:
file_type_list.append(file_type)
if file_type in file_type_list:
continue
try:
print(directory + file_type.replace(".","/"))
os.mkdir(directory + file_type.replace(".","/"))
except OSError as error:
print(error)
for filename in os.listdir("/Users/Gustaf/downloads"):
movable_file_path = directory + "/" + "%s" % (filename)
file_type = os.path.splitext(filename)[1]
file_type_no_extension = file_type.replace(".","")
file_no_extension = os.path.splitext(filename)[0] #used for the full file path in shutil.move
fileDestination = directory + "/" + "%s" % (file_type_no_extension)
if os.path.isdir(movable_file_path) == True:
#skip directories
print(movable_file_path)
print("THIS IS A FOLDER" + "\n")
if os.path.isfile(movable_file_path) == True:
#The files you actually want to move
print(filename)
print("THIS IS A FILE" + "\n")
shutil.move(movable_file_path,fileDestination)
第一部分工作了,程序为每种文件类型创建了一个文件夹,但是当我尝试移动文件时,我得到了:
Traceback (most recent call last):
File "/Users/Gustaf/Desktop/Programming/downloads_sorter/main.py",line 41,in <module>
shutil.move(movable_file_path,fileDestination)
File "/usr/local/Cellar/[email protected]/3.8.5/Frameworks/Python.framework/Versions/3.8/lib/python3.8/shutil.py",line 786,in move
raise Error("Destination path '%s' already exists" % real_dst)
shutil.Error: Destination path '/Users/Gustaf/downloads/.DS_Store' already exists
filename
,movable_file_path
和fileDestination
的输出如下:
DS_Store
/Users/Gustaf/downloads/DS_Store
/Users/Gustaf/downloads/
92722314_10157775412048005_7592678894226898944_n.jpg
/Users/Gustaf/downloads/92722314_10157775412048005_7592678894226898944_n.jpg
/Users/Gustaf/downloads/jpg
epub-download-atomic-habits-by-james-clear-9781847941831-fhy.epub
/Users/Gustaf/downloads/epub-download-atomic-habits-by-james-clear-9781847941831-fhy.epub
/Users/Gustaf/downloads/epub
第一个是引起问题的(DS_store)。某些文件可以移动,但是遇到此问题后我无处可去。我在做什么错了?
解决方法
针对以下内容:
- 文件名:
DS_Store
- movable_file_path:
/Users/Gustaf/downloads/DS_Store
- 目的地:
/Users/Gustaf/downloads/
您的代码正在做什么,试图将DS_Store从
/Users/Gustaf/downloads/DS_Store
至/Users/Gustaf/downloads/DS_Store
,这实际上是相同的地方。您根本不打算移动DS_Store,因此应将其忽略。您可以通过检查fileName
中是否存在movable_file_path
在这种情况下,您可以如下更改if语句:
if os.path.isfile(movable_file_path) and filename not in movable_file_path:
#The files you actually want to move
print(filename)
print("THIS IS A FILE" + "\n")
shutil.move(movable_file_path,fileDestination)