将路径/文件列表复制到目录
我正在做一个练习,手里有一份文件列表(这些文件是以绝对路径给出的),如果设置了某个标志,就应该把这些文件复制到指定的目录。这是我用来复制文件的函数:
def copy_to(paths, dst):
if not os.path.exists(dst):
os.makedirs(dst)
for path in paths:
shutil.copy(path, dst)
不过,给出的解决方案看起来有点不同:
def copy_to(paths, dst):
if not os.path.exists(dst):
os.makedirs(dst)
for path in paths:
basename = os.path.basename(path)
shutil.copy(path, os.path.join(dst, basename))
在这里,真的有必要先获取路径的基本名称,然后再把它和目标路径连接起来吗?
3 个回答
1
其实这个操作并不是必须的。文档上说:
把文件src复制到文件或目录dst。如果dst是一个目录,就会在这个目录下创建一个和src同名的文件(或者覆盖掉已有的文件)。
给出的解决方案是明确地执行这个操作,而不是让shutil.copy自动处理。这就是唯一的区别。
1
这个问题已经有人回答过了,但我注意到几点。这里使用的dir这个名字遮住了内置的dir函数。另外,os.path.makedirs是什么?在我的Python(2.6)中,这个会返回
>>> os.path.makedirs
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'makedirs'
你是指os.makedirs吗?
3
根据目前的手册,这个操作是不需要的:
shutil.copy(src, dst) 是用来把文件 src 复制到文件或目录 dst。如果 dst 是一个目录,那么会在这个目录下创建一个和 src 同名的文件(或者覆盖掉原来的文件)。 权限设置也会被复制过来。 src 和 dst 是以字符串形式给出的路径名。
手册上说,如果 dst
是一个目录,copy()
就会在 dst
里放一个和 src
同名的文件。