2014-01-07 206 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