将路径/文件列表复制到目录

1 投票
3 回答
2639 浏览
提问于 2025-04-16 05:35

我正在做一个练习,手里有一份文件列表(这些文件是以绝对路径给出的),如果设置了某个标志,就应该把这些文件复制到指定的目录。这是我用来复制文件的函数:

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 同名的文件。

撰写回答