Python shutil 文件移动 os 遍历循环
Python shutil file move in os walk for loop
下面的代码在一个目录中搜索任何 PDF,对于它找到的每个 PDF,它都会移动到附加了“_folder”的相应文件夹中。
能不能用更简单的词来表达呢?这几乎是不可读的。此外,如果找不到文件夹,它会破坏 PDF!
import os
import shutil
for root, dirs, files in os.walk(folder_path_variable):
for file1 in files:
if file1.endswith('.pdf') and not file1.startswith('.'):
filenamepath = os.path.join(root, file1)
name_of_file = file1.split('-')[0]
folderDest = filenamepath.split('/')[:9]
folderDest = '/'.join(folderDest)
folderDest = folderDest + '/' + name_of_file + '_folder'
shutil.move(filenamepath2, folderDest)
我真的想在构造变量 name_of_file 后遍历同一目录,如果该变量在文件夹名称中,它会执行移动。但是我在尝试嵌套另一个 for 循环时遇到了问题...
我会尝试这样的事情:
for root, dirs, files in os.walk(folder_path_variable):
for filename in files:
if filename.endswith('.pdf') and not filename.startswith('.'):
filepath = os.path.join(root, filename)
filename_prefix = filename.split('-')[0]
dest_dir = os.path.join(root, filename_prefix + '_folder')
if not os.path.isdir(dest_dir):
os.mkdir(dest_dir)
os.rename(filepath, os.path.join(dest_dir, filename))
John Zwinck 的回答是正确的,除了它包含一个错误,如果目标文件夹已经存在,则会在该文件夹中创建一个文件夹并将 pdf 移动到该位置。我已经通过在内部 for 循环(for filename in files)中添加一个 'break' 语句来解决这个问题。
下面的代码现在可以正确执行。查找以 pdf 的前几个字符命名的文件夹(以“-”为前缀),尾部为“_folder”,如果存在,则将 pdf 移入其中。如果没有,则使用前缀名称和“_folder”创建一个,并将 pdf 移入其中。
for root, dirs, files in os.walk(folder_path_variable):
for filename in files:
if filename.endswith('.pdf') and not filename.startswith('.'):
filepath = os.path.join(root, filename)
filename_prefix = filename.split('-')[0]
dest_dir = os.path.join(root, filename_prefix + '_folder')
if not os.path.isdir(dest_dir):
os.mkdir(dest_dir)
os.rename(filepath, os.path.join(dest_dir, filename))
break
下面的代码在一个目录中搜索任何 PDF,对于它找到的每个 PDF,它都会移动到附加了“_folder”的相应文件夹中。 能不能用更简单的词来表达呢?这几乎是不可读的。此外,如果找不到文件夹,它会破坏 PDF!
import os
import shutil
for root, dirs, files in os.walk(folder_path_variable):
for file1 in files:
if file1.endswith('.pdf') and not file1.startswith('.'):
filenamepath = os.path.join(root, file1)
name_of_file = file1.split('-')[0]
folderDest = filenamepath.split('/')[:9]
folderDest = '/'.join(folderDest)
folderDest = folderDest + '/' + name_of_file + '_folder'
shutil.move(filenamepath2, folderDest)
我真的想在构造变量 name_of_file 后遍历同一目录,如果该变量在文件夹名称中,它会执行移动。但是我在尝试嵌套另一个 for 循环时遇到了问题...
我会尝试这样的事情:
for root, dirs, files in os.walk(folder_path_variable):
for filename in files:
if filename.endswith('.pdf') and not filename.startswith('.'):
filepath = os.path.join(root, filename)
filename_prefix = filename.split('-')[0]
dest_dir = os.path.join(root, filename_prefix + '_folder')
if not os.path.isdir(dest_dir):
os.mkdir(dest_dir)
os.rename(filepath, os.path.join(dest_dir, filename))
John Zwinck 的回答是正确的,除了它包含一个错误,如果目标文件夹已经存在,则会在该文件夹中创建一个文件夹并将 pdf 移动到该位置。我已经通过在内部 for 循环(for filename in files)中添加一个 'break' 语句来解决这个问题。
下面的代码现在可以正确执行。查找以 pdf 的前几个字符命名的文件夹(以“-”为前缀),尾部为“_folder”,如果存在,则将 pdf 移入其中。如果没有,则使用前缀名称和“_folder”创建一个,并将 pdf 移入其中。
for root, dirs, files in os.walk(folder_path_variable):
for filename in files:
if filename.endswith('.pdf') and not filename.startswith('.'):
filepath = os.path.join(root, filename)
filename_prefix = filename.split('-')[0]
dest_dir = os.path.join(root, filename_prefix + '_folder')
if not os.path.isdir(dest_dir):
os.mkdir(dest_dir)
os.rename(filepath, os.path.join(dest_dir, filename))
break