繁体   English   中英

将子目录中的特定文件移动到目录中--python

[英]Moving specific files in subdirectories into a directory - python

我对python很新,但我一直在努力学习基础知识,以帮助我在地质学方面的研究。

无论如何,我有几个文件,一旦我从他们的zip文件中提取(痛苦的慢进程顺便说一句)产生几百个子目录,每个子目录有2-3个文件。 现在我要做的是提取所有那些以'dem.tif'结尾的文件,并将它们放在一个单独的文件中(移动而不是复制)。

我可能试图跳到这里的深层,但我编写的代码运行没有错误,所以它一定不能找到文件(确实存在!)因为它给了我else语句。 这是我创建的代码

import os

src = 'O:\DATA\ASTER GDEM\Original\North America\UTM Zone 14\USA\Extracted' # input
dst = 'O:\DATA\ASTER GDEM\Original\North America\UTM Zone 14\USA\Analyses' # desired     location

def move():
    for (dirpath, dirs, files) in os.walk(src):
        if files.endswith('dem.tif'):
            shutil.move(os.path.join(src,files),dst)
            print ('Moving ', + files, + ' to ', + dst)
        else:
            print 'No Such File Exists'

首先,欢迎社区和python! 您可能想要更改您的用户名,特别是如果您经常在这里。 :)

我建议如下( Beazley先生被盗):

# genfind.py
#
# A function that generates files that match a given filename pattern

import os
import shutil
import fnmatch

def gen_find(filepat,top):
    for path, dirlist, filelist in os.walk(top):
        for name in fnmatch.filter(filelist,filepat):
            yield os.path.join(path,name)

# Example use

if __name__ == '__main__':
    src = 'O:\DATA\ASTER GDEM\Original\North America\UTM Zone 14\USA\Extracted' # input
    dst = 'O:\DATA\ASTER GDEM\Original\North America\UTM Zone 14\USA\Analyses' # desired     location

    filesToMove = gen_find("*dem.tif",src)
    for name in filesToMove:
        shutil.move(name, dst)

更新:提问者在下面澄清说他/她实际上是在调用移动功能,这是我答案中的第一点。

还有一些其他事项需要考虑:

  • 你有从os.walk错误的每个元组中返回的元素的顺序,我担心 - 检查该函数文档
  • 假设你已经解决了这个问题,还要记住你需要迭代files ,并且你需要os.join每个都要root ,而不是src
  • 如果打印出os.walk返回的值并注释掉该循环中的其余代码,上述内容将是显而易见的。
  • 使用像移动文件这样的潜在破坏性操作的代码,我总是首先尝试一些代码,只打印参数到shutil.move直到你确定它是正确的。

我认为你已经混淆了你应该使用os.walk()

for dirpath, dirs, files in os.walk(src):
    print dirpath
    print dirs
    print files
    for filename in files:
        if filename.endswith('dem.tif'):
            shutil.move(...)
        else:
            ...

您需要在Python中执行此操作的任何特定原因吗? 一个简单的shell命令会不简单吗? 如果您使用的是类Unix系统,或者在Windows上访问Cygwin:

find src_dir -name "*dem.tif" -exec mv {} dst_dir

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM