def copy_excel():
srcpath = "C:\\Aloha" #where the excel files are located
srcfiles = os.listdir(srcpath) #sets srcfiles as list of file names in the source path folder
destpath = "C:\\" #destination where the folders will be created
destdir = list(set([filename[19:22] for filename in srcfiles])) #extract three digits from filename to use for folder creation (i.e 505, 508, 517,...)
#function to handle folder creation
def create(dirname, destpath):
full_path = os.path.join(destpath, dirname)
if os.path.exists(full_path):
pass
else:
os.mkdir(full_path)
return full_path
#function to handle moving files to appropriate folders
def move(filename, dirpath):
shutil.move(os.path.join(srcpath, filename), dirpath)
#creates the folders with three digits as folder name by calling the create function above
targets = [(folder, create(folder, destpath)) for folder in destdir]
#handles moving files to appropriate folders if the three digits in file name matches the created folder
for dirname, full_path in targets:
for filename in srcfiles:
if dirname == filename[19:22]:
move(filename, full_path)
else:
pass
我对Python有些新意,所以请耐心等待!我能够在这个网站上找到这个代码块,并根据我的具体用例进行了调整。该代码适用于创建指定的文件夹并将文件放入相应的文件夹。但是,当我再次为放入"C:\\Aloha"
的新文件运行代码时,我得到Error 183: Cannot create a file when that file already exists.
在这种情况下,该文件夹已经存在,因为它是在第一次运行脚本时先前创建的
当目标尝试创建已存在的文件夹时,代码出错。我的问题是,处理已存在的文件夹的逻辑是什么,忽略错误只是将文件移动到相应的文件夹?该脚本只应创建文件夹(如果它们不存在)。
任何帮助将不胜感激!我尝试过try / except和嵌套if / else语句以及os.path.isdir(path)
来检查目录是否存在,但我没有运气。我为任何错误的评论道歉,我在构建这个脚本时仍在学习Python逻辑。
答案 0 :(得分:6)
您可以使用os.mkdirs
,不仅可以创建级联目录,例如C:\foo\bar\qux
将创建foo
,bar
和{{ 1}}如果它们不存在,但您也可以设置qux
,以便在目录存在时不会引发错误。
所以:
exist_ok=True
答案 1 :(得分:2)
如果您想要抛出错误或在目录存在时停止处理,您可以在os.path.exists(full_path)
之前使用mkdir
。
答案 2 :(得分:0)
我刚遇到的另一个选择......
try:
os.mkdir(path)
except (FileExistsError):
pass
except Exception as e:
raise e