如何将日志从本地驱动器迭代复制到网络共享?

时间:2014-07-08 15:10:52

标签: python logging copying iteration

我是Python的新手。我正在运行3.3版本。我想迭代地将所有通配符命名的文件夹和文件从C盘复制到网络共享。通配符命名文件夹称为“Test_1”,“Test_2”等,文件夹包含相同的命名文件夹“Pass”。 “Pass”中的文件以.log结尾。我不想复制Fail文件夹中的.log文件。所以,我有这个:

C:\Test_1\Pass\a.log
C:\Test_1\Fail\a.log
C:\Test_1\Pass\b.log
C:\Test_1\Fail\b.log
C:\Test_2\Pass\y.log
C:\Test_2\Fail\y.log
C:\Test_2\Pass\z.log
C:\Test_2\Fail\z.log

但只想复制

C:\Test_1\Pass\a.log
C:\Test_1\Pass\b.log
C:\Test_2\Pass\y.log
C:\Test_2\Pass\z.log

为:

\\share\Test_1\Pass\a.log
\\share\Test_1\Pass\b.log
\\share\Test_2\Pass\y.log
\\share\Test_2\Pass\z.log'

以下代码有效,但我不想复制大量的过程代码。我想让它面向对象。

import shutil, os
from shutil import copytree
def main():
    source = ("C:\\Test_1\\Pass\\")
    destination = ("\\\\share\\Test_1\\Pass\\")
    if os.path.exists ("C:\\Test_1\\Pass\\"):
        shutil.copytree (source, destination)
        print ('Congratulations!  Copy was successfully completed!')
    else:
        print ('There is no Actual folder in %source.')
main()

另外,我注意到当os路径不存在时,它不会打印“else”print语句。我该如何做到这一点?提前谢谢!

2 个答案:

答案 0 :(得分:0)

def remotecopy(local, remote)
    if os.path.exists(local):
        shutil.copytree (local, remote)
        print ('Congratulations!  Copy was successfully completed!')
    else:
        print ('There is no Actual folder in %local.')

然后只是remotecopy(“C:\ Local \ Whatever”,“C:\ Remote \ Whatever”)

答案 1 :(得分:0)

这不是一个完美的例子,但你可以这样做:

import glob, os, shutil

#root directory
start_dir = 'C:\\'

def copy_to_remote(local_folders, remote_path):
    if os.path.exists(remote_path):    
        for source in local_folders:
            # source currently has start_dir at start. Strip it and add remote path
            dest = os.path.join(remote_path, source.lstrip(start_dir))
            try:
                shutil.copytree(source, dest)
                print ('Congratulations!  Copy was successfully completed!')
            except FileExistsError as fe_err:
                print(fe_err)
            except PermissionError as pe_err:
                print(pe_err)
    else:
        print('{} - does not exist'.format(remote_path))



# Find all directories that start start_dir\Test_ and have subdirectory Pass
dir_list = glob.glob(os.path.join(start_dir, 'Test_*\\Pass'))
if dir_list:
    copy_to_remote(dir_list, '\\\\Share\\' )

可以找到glob的文档here