将多个文件复制到多个目录的脚本
Script to copy multiple files to multiple directories
我有一个包含很多文件的目录:
abc.txt
def.txt
ghi.txt
etc.
我写了一个脚本,它根据每个文件的名称(目录 abc、def、ghi 等)创建一个新目录。
现在我想复制文件 abc.txt 到目录 abc,文件 def.txt 到目录 def 等等。
我正在尝试使用 shutil 执行此操作,但我的脚本不起作用。
import os, glob, shutil
myfiles = glob.glob("/users/source_directory/*.*")
for f in myfiles:
file_name, file_extension = os.path.splitext(f)
destination = (os.path.join('/users/destination_directory/',file_name))
shutil.copy(f, (os.path.join(destination,file_name)))
这会在源目录中生成源文件的副本,减去其文件扩展名。关于如何让它按预期工作有什么建议吗?
首先,您的 file_name 变量不仅包含文件名,还包含文件的整个绝对路径。这意味着目标变量的 os.path.join 命令会通过 /users/source_directory.
覆盖 /users/destination_directory 路径
其次,您必须创建新目录。
第三,我还添加了复制过程的文件扩展名。
以下代码正在执行您的工作。
import os, glob, shutil
myfiles = glob.glob("/users/source_directory/*.*")
for f in myfiles:
file_path, file_extension = os.path.splitext(f)
file_name = os.path.basename(file_path)
destination = os.path.join('/users/destination_directory/',file_name)
os.mkdir(destination)
shutil.copy(f, (os.path.join(destination,file_name+file_extension)))
我有一个包含很多文件的目录:
abc.txt
def.txt
ghi.txt
etc.
我写了一个脚本,它根据每个文件的名称(目录 abc、def、ghi 等)创建一个新目录。
现在我想复制文件 abc.txt 到目录 abc,文件 def.txt 到目录 def 等等。
我正在尝试使用 shutil 执行此操作,但我的脚本不起作用。
import os, glob, shutil
myfiles = glob.glob("/users/source_directory/*.*")
for f in myfiles:
file_name, file_extension = os.path.splitext(f)
destination = (os.path.join('/users/destination_directory/',file_name))
shutil.copy(f, (os.path.join(destination,file_name)))
这会在源目录中生成源文件的副本,减去其文件扩展名。关于如何让它按预期工作有什么建议吗?
首先,您的 file_name 变量不仅包含文件名,还包含文件的整个绝对路径。这意味着目标变量的 os.path.join 命令会通过 /users/source_directory.
覆盖 /users/destination_directory 路径其次,您必须创建新目录。
第三,我还添加了复制过程的文件扩展名。
以下代码正在执行您的工作。
import os, glob, shutil
myfiles = glob.glob("/users/source_directory/*.*")
for f in myfiles:
file_path, file_extension = os.path.splitext(f)
file_name = os.path.basename(file_path)
destination = os.path.join('/users/destination_directory/',file_name)
os.mkdir(destination)
shutil.copy(f, (os.path.join(destination,file_name+file_extension)))