2014-01-07 150 views
0

作为一名Python初学者,我遇到了一些实际的问题。下面是我最终(!)做的一个脚本,它只是将选择的文件从选择的目录移动到新的文件夹。 由于某些我无法理解的原因,它只能使用一次,然后创建的目标文件夹真的很奇怪。有一次,它创建了一个名为“目录”的未知应用程序,并使用正确的名称创建了一个文本文件,并使用看似随机的文件生成内容 - 同样,它创建的文件也被正确命名。shutil.copy只能工作一次

下面是相关的脚本:

#!/usr/bin/python 

import os, shutil 

def file_input(file_name):     
    newlist = []            #create new list 
    for names in os.listdir(file_name):       #loops through directory 
     if names.endswith(".txt") or names.endswith(".doc"): #returns only extensions required  
      full_file_name = os.path.join(file_name, names)  #creates full file path name - required for further file modification 
      newlist.append(full_file_name)      #adds item to list 
      dst = os.path.join(file_name + "/target_files") 
      full_file_name = os.path.join(file_name, names) 
      if (os.path.isfile(full_file_name)): 
       print "Success!" 
       shutil.copy(full_file_name, dst) 

def find_file(): 
    file_name = raw_input("\nPlease carefully input full directory pathway.\nUse capitalisation as necessary.\nFile path: ") 
    file_name = "/root/my-documents"       #permanent input for testing! 
    return file_input(file_name) 
    '''try: 
     os.path.exists(file_name) 
     file_input(file_name) 
    except (IOError, OSError): 
     print "-" * 15 
     print "No file found.\nPlease try again." 
     print "-" * 15 
     return find_file()''' 

find_file() 

有人能告诉我为什么当我删除创建的文件夹,并尝试再次运行它,我能做些什么来实现这一目标这个脚本是不可复制的?

我知道这有点乱,但这是一个更大的脚本的一部分,我仍然处于初稿阶段!

非常感谢

+0

'if(os.path.isfile(full_file_name)):'检查是否存在目标文件。顺便说一句,清理你的代码!奇怪的名字,不需要的括号,没有理由的“返回”......这不是“有点混乱”,这是一团糟。 – Matthias

+0

不,它会检查源文件,file_name永远不会被修改,也不会名称 – praveen

+0

对不起,如果它让你困惑你Matthius。正如我所说,这是一份粗略的工作。你说得对,我应该在发布之前整理一下,以便更清楚地说明问题。许多不必要的部分和'奇怪的名字'让我能够跟随正在发生的事情,而不是与这部分脚本相关,或者是以前尝试使其工作的部分遗留下来。这是我发布的第一篇文章,我对迟到表示抱歉 – user3103208

回答

0

这工作:

import os, shutil 

def file_input(file_name):     
    newlist = []            #create new list 
    for names in os.listdir(file_name):       #loops through directory 
     if names.endswith(".txt") or names.endswith(".doc"): #returns only extensions required  
      full_file_name = os.path.join(file_name, names)  #creates full file path name - required for further file modification 
      newlist.append(full_file_name)      #adds item to list 
      dst = os.path.join(file_name + "/target_files") 

      if not os.path.exists(dst): 
       os.makedirs(dst) 

      full_file_name = os.path.join(file_name, names) 
      if (os.path.exists(full_file_name)): 
       print "Success!" 
       shutil.copy(full_file_name, dst) 

def find_file(): 
    file_name = raw_input("\nPlease carefully input full directory pathway.\nUse capitalisation as necessary.\nFile path: ") 
    file_name = "/home/praveen/programming/trash/documents"       #permanent input for testing! 
    return file_input(file_name) 

find_file() 

你需要检查,如果你的复制目标目录实际存在,如果不创建它。然后shutil.copy会将你的文件复制到该目录

+0

谢谢Praveen!这是有点失踪。我对shutil函数感到困惑 - 我见过的所有文档都说目标文件夹在尝试发送之前不应该存在!试错! – user3103208