查找文件,复制到新目录python

时间:2015-11-18 13:56:49

标签: python file copy

我想: 编写一个脚本,将单个目录路径作为命令行参数,然后遍历该路径的所有子目录,查找扩展名为“.py”的文件,将每个子目录复制到文件系统中的临时目录(例如/ tmp / pyfiles )。您的脚本应检查是否存在临时目录,如果已存在则将其删除;然后它应该在开始复制文件之前创建一个新目录。

我有这个:

#!/usr/bin/env python

import os, sys
import shutil
#import module

rootdir = sys.argv[1]
#take input directory

if os.path.exists('tmp/pyfiles'):
    shutil.rmtree('tmp/pyfiles')

if not os.path.exists('tmp/pyfiles'):
    os.makedirs('tmp/pyfiles')
#check whether directory exists, if it exists remove and remake, if not make

for root, dirs, files in os.walk(rootdir):
    for f in files:
        if os.path.splitext(f)[1] in ['.py']:
            shutil.copy2(f, tmp/pyfiles)  
#find files ending with .py, copy them and place in tmp/pyfiles directory

我收到此错误:

Traceback (most recent call last):
  File "seek.py", line 20, in <module>
    shutil.copy2(f, tmp/pyfiles) 
NameError: name 'tmp' is not defined

有人可以帮帮我吗?:)谢谢

3 个答案:

答案 0 :(得分:0)

您的代码显示shutil.copy2(f, tmp/pyfiles),我认为这意味着

shutil.copy2(f, 'tmp/pyfiles')

答案 1 :(得分:0)

当你使用时     os.walk() 方法你忘记了文件的完整路径。我要做的是使用分析每个目录     os.listdir() 方法然后复制每个文件考虑其绝对路径。像这样:

for root, dirs, files in os.walk(rootdir):
    for dir in dirs:        
        for f in os.listdir(dir):        
            if os.path.splitext(f)[1] in ['.py']:                                                    
                shutil.copy2(os.path.join(root, dir, f), "tmp/pyfiles")

我希望这有帮助,也许有更清洁的解决方案。

答案 2 :(得分:0)

按照你的说法做,你必须检查根目录是否存在,如果没有创建新目录,请进入以删除所有内容。

要从dir复制到您的文件,您必须检查文件名以dir结尾的.py中的文件,然后用根路径替换dir路径并在根目录中创建新文件匹配文件的内容 如果我们在dir中找到了一个目录,我们应该在根目录中创建一个新目录 之后,只需递归调用函数,将dir的所有内容复制到根目录

import os, sys


rootdir = sys.argv[1]
PATH = "/tmp/pyfiles/"

def check(path, _file):
    global rootdir, PATH

    for item in os.listdir(path):
       newpath = os.path.join(path, item)
       if os.path.isdir(newpath):
           os.mkdir(os.path.join(PATH, newpath.replace(rootdir, '')))
           check(newpath, _file)
       else:
           if item.endswith(_file):
               source  = open(newpath, 'r')
               print os.path.join(path, newpath.replace(rootdir, ''))
               output = open(os.path.join(PATH, newpath.replace(rootdir, '')), 'w')
               output.write(source.read())
               output.close()
               source.close()


if __name__ == '__main__':
    if os.path.isdir(PATH):
        for root, dirs, files in os.walk(PATH, topdown=False):
            for name in files:
                os.remove(os.path.join(root, name))
            for name in dirs:
                os.rmdir(os.path.join(root, name))
        os.rmdir(PATH)

    os.mkdir(PATH)

    check(rootdir, '.py')

我希望它会有用。