[英]Organizing files into folders based on filename
I'm trying to create a program that reads pdf files (eg files.pdf), separates them by name and moves them to their relevant folder (based on name), like this: 我正在尝试创建一个程序,以读取pdf文件(例如,files.pdf),按名称将其分离,然后将其移动到其相关的文件夹(基于名称),如下所示:
Files:
house.pdf
house_blue.pdf
road.pdf
Folders:
house = house.pdf, house_blue.pdf
road = road.pdf
My code by now: 现在我的代码:
for f in os.listdir():
file_name, file_ext = os.path.splitext(f)
if len(file_name.split('_')) == 2:
f_name, f_course = file_name.split('_')
elif len(file_name.split('_')) != 2:
f_name = file_name
def movefile (file_name):
new_dir = src + "/" + file_name
for file_name in os.listdir():
if not os.path.exists(new_dir):
os.mkdir(new_dir)
if file_name.startswith(file_name):
shutil.move(src+"/"+file_name, new_dir)
It's working fine, the only problem is that the for statement is resulting in only the last pdf file, creating only one folder and copying all files to that folder. 它工作正常,唯一的问题是for语句仅生成最后一个pdf文件,仅创建一个文件夹并将所有文件复制到该文件夹。
Can someone help me where it is wrong? 有人可以在错误地方帮助我吗?
Thanks in advance. 提前致谢。
Edit: Code Working: 编辑:代码工作:
src = (os.getcwd())
for f in os.walk(src):
for f in os.listdir(src):
if os.path.isfile(src): #Checar se possui arquivos dentro da pasta(src).
continue
lfolders = os.listdir(src) #Atribuir na variavel lfolders todos os diretórios na pasta (src).
file_name, file_ext = os.path.splitext(f) #separar nome da extensão (.pdf)
if len(file_name.split('_')) == 2: #se possuir dois nomes (nome e curso)
f_name, f_course = file_name.split('_')
try:
if f_name not in lfolders:
for dirmake in os.listdir(src):
os.makedirs(os.path.join(src, f_name))
elif f_name in lfolders:
shutil.move(f, src+"/"+f_name)
except OSError:
pass
elif len(file_name.split(')')) != 2: #se possuir um nome (nome)
f_name = file_name
try:
if f_name not in lfolders:
for dirmake in os.listdir(src):
os.makedirs(os.path.join(src, f_name))
elif f_name in lfolders:
shutil.move(f, src+"/"+f_name)
except OSError:
pass
If I understand correctly, you need to do something for every iteration of the loop. 如果我理解正确,则需要为循环的每次迭代做一些事情 。
for f in os.listdir():
file_name, file_ext = os.path.splitext(f)
if file_ext == 'pdf':
if len(file_name.split('_')) == 2:
folder, f_course = file_name.split('_')
elif len(file_name.split('_')) != 2:
folder = file_name
print("Ready to move {} into folder {}".format(file_name, folder))
movefile(f, folder) # Call your function, add a parameter for the folder
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.