2017-01-26 86 views
1

我正在尝试编写一个脚本(python 2.7),它将使用正则表达式来识别文件夹中的特定文件并将它们移动到另一个文件夹。但是,当我运行该脚本时,源文件夹将移至目标文件夹,而不仅仅是其中的文件。将特定文件从一个文件夹移动到另一个文件夹的Python脚本

import os, shutil, re 

src = "C:\\Users\\****\\Desktop\\test1\\" 
#src = os.path.join('C:', os.sep, 'Users','****','Desktop','test1\\') 
dst = "C:\\Users\\****\\Desktop\\test2\\" 
#dst = os.path.join('C:', os.sep, 'Users','****','Desktop','test2') 

files = os.listdir(src) 
#regexCtask = "CTASK" 
print files 
#regex =re.compile(r'(?<=CTASK:)') 


files.sort() 

#print src, dst 

regex = re.compile('CTASK*') 

for f in files: 
    if regex.match(f): 
     filescr= os.path.join(src, files) 
     shutil.move(filesrc,dst) 
     #shutil.move(src,dst) 

所以基本上有在“测试1”文件夹中的文件,我想移动到“test2的”,但不是所有的文件,只包含“CTASK”开头的人。

路径中的****是为了保护我的工作用户名。

对不起,如果是杂乱的,我仍然在尝试一些事情。

+1

' os.path.join(src,files)'应该产生一个异常。 (假设源代码中的任何文件都以“CTAS”加上0或更多的“K”字符开头,这可能不是你真正想要查找的内容。) – glibdud

回答

1

您需要分配路径确切文件(f),以filescr变量在每次循环迭代,而不是路径filesfiles - 是一个list!)

试试下面的代码

import os 
from os import path 
import shutil 

src = "C:\\Users\\****\\Desktop\\test1\\" 
dst = "C:\\Users\\****\\Desktop\\test2\\" 

files = [i for i in os.listdir(src) if i.startswith("CTASK") and path.isfile(path.join(src, i))] 
for f in files: 
    shutil.copy(path.join(src, f), dst) 
+0

太好了,工作正常!你能否详细解释一下在这个例子中路径模块的功能? – R2DeeTard

+1

'path.join()'用于'path_to_folder' +'file_name' ='path_to_file'。 'path.isfile()' - 只是为了检查'listdir(src)'中的那个项目是一个文件,而不是一个文件夹 - 如果需要的话你可以删除这个条件。 – Andersson

+0

另一个快速的问题。我如何将这个应用到文件夹而不是仅仅是文件? 编辑:neverimind。 path.isdir()是我需要的。 – R2DeeTard

相关问题