在python中查找具有特定扩展的文件的子路径

时间:2016-02-02 08:11:15

标签: python

我试图在文件夹(和子文件夹)中找到带有externsion mp4的所有文件,并将它们复制到另一个目录中。我设法找到扩展名为mp4的所有文件但是我没有设法保留这些文件的目录。我的代码如下:

import os
from shutil import copyfile

path = "videos/"
for root, dirs, files in os.walk(path):
    for name in files:
       if name.endswith((".mp4", ".mp4")):
          print(name)
          # copyfile(src, dst)

我想找到名称的路径(对应于我的视频)。我怎么能这样做?

3 个答案:

答案 0 :(得分:1)

使用os.path.join()

import os
from shutil import copyfile

path = "videos/"
for root, dirs, files in os.walk(path):
    for name in files:
       if name.endswith((".mp4", ".mp4")):
          print(os.path.join(root, name))
          # copyfile(src, dst)

尽管使用绝对路径被认为更好,但如果您想要相对路径,则可以使用os.path.relpath。来自os.path.relpath文档

  

os.path.relpath(path [,start])

     

将相对文件路径从当前目录或可选的启动目录返回到路径。这是路径计算:不访问文件系统以确认路径的存在或性质或启动。

     

启动默认为os.curdir。

     

可用性:Windows,Unix。

     

2.6版中的新功能。

答案 1 :(得分:1)

为什么不使用glob

import glob, shutil
for file in glob.iglob('/foo/*.mp4'): 
    shutil.copy2(file, '/bar/{0}'.format(file))

答案 2 :(得分:1)

来自os.walk上的文档:

  

dirpath是一个字符串,即目录的路径。 dirnames是dirpath中子目录的名称列表(不包括'。'和' ..')。 filenames是dirpath中非目录文件的名称列表。请注意,列表中的名称不包含路径组件。要获取dirpath中文件或目录的完整路径(以top开头),请执行os.path.join(dirpath,name)。

所以你的代码应该是这样的:

import os
from shutil import copyfile

path = "videos/"
for root, dirs, files in os.walk(path):
    for name in files:
       if name.endswith((".mp4", ".mp4")):
          print(name)
          src = os.path.join(root, name)
          copyfile(src, dst)