2016-07-14 38 views
1

我想寫一個Python腳本來將具有擴展名'.txt'的文件從一個文件夾複製到另一個文件夾。我打字在命令行中執行以下操作:在Python中複製選定的文件

python C:/Users/Username/Desktop/folder_name/copyselect.py C:/Users/Username/Desktop/folder_name C:Users/Username/Desktop/new_folder 

這是代碼:

import os 
import sys 
import shutil 

def main(): 
    src = sys.argv[1] 
    dst = sys.argv[2] 

    for filenames, dirpath, dirnames in os.walk(src): 
    if not os.path.isdir(dst): 
     os.makedirs(dst) 
    for filename in filenames: 
     if filename.endswith('.txt'): 
     shutil.copy2(os.path.join(src, filename), dst) 

if __name__ == "__main__": 
    main() 

我不斷收到以下錯誤信息:

IO Error: [Errno 2] No such file or directory: 'C:/Users/Username/Desktop/folder_name/C' 

爲什麼是這個神祕的「C '出現在'folder_name'後面?它似乎來自命令行最後一個文件路徑中的'C'。這是Windows的東西嗎?我怎樣才能解決這個問題?

回答

0

把單引號之間的命令參數...

python C:/Users/Username/Desktop/folder_name/copyselect.py 'C:/Users/Username/Desktop/folder_name' 'C:Users/Username/Desktop/new_folder' 
1

你從os.walk結果相反的順序。應該是:

for dirpath, dirnames, filenames in os.walk(src): 
    if not os.path.isdir(dst): 
     os.makedirs(dst) 
    for filename in filenames: 
     if filename.endswith('.txt'): 
     shutil.copy2(os.path.join(src, filename), dst) 

你缺少你的第二個參數斜線。 應該是:

python "C:/Users/Username/Desktop/folder_name/copyselect.py" "C:/Users/Username/Desktop/folder_name" "C:/Users/Username/Desktop/new_folder"

+0

謝謝,這是非常有幫助的。 –

0
#Copy the files with Two examples. 
#If your are not expecting this answer, sorry. 

#................................................................... 
import os, shutil 
src = os.path.abspath (sys.argv[1]) 
dst = os.path.abspath (sys.argv[2]) 

for filenames, dirpath, dirnames in os.walk(src): 

    dstRoot  = dst + filenames.replace (src, '') 

    if not os.path.isdir (dstRoot): 
     os.makedirs (dstRoot) 

    for dirname in dirnames: 
     if dirname.endswith('.txt'): 
      sourceDocu = (filenames + '\\' + dirname) 
      targetDocu = (dstRoot + '\\' + dirname)    
      shutil.copy2 (sourceDocu, targetDocu) 

#................................................................... 
#Files copy from Single folder 
import os, shutil 
src = os.path.abspath (sys.argv[1]) 
dst = os.path.abspath (sys.argv[2]) 

fileList = os.listdir (src) 

if fileList : 
    if not os.path.isdir (dst): 
     os.makedirs (dst) 

    for eachFile in fileList :   
     if eachFile.endswith('.txt') :    
      shutil.copy2 (src + '\\' + eachFile, dst + '\\' + eachFile)    

#...................................................................    
0

非常感謝你對你的答案!

作出這些修改之後,如果我在文件路徑添加對SRCDST腳本運行,但我不能讓它在命令行中運行。

由於我想腳本搜索子文件夾,所以我添加了一行來處理。該腳本現在看起來是這樣的:

import os 
import sys 
import shutil 

def main(): 
    src = sys.argv[1] 
    dst = sys.argv[2] 

    for dirpath, dirnames, filenames in os.walk(src): 
    if not os.path.isdir(dst): 
     os.makedirs(dst) 
    filenames = [os.path.join(dirpath, filename) for dirpath, dirnames, filenames in os.walk(src) for filename in filenames] 
    for filename in filenames: 
     if filename.endswith('.txt'): 
     shutil.copy2(os.path.join(src, filename), dst) 

if __name__ == '__main__': 
    main() 

在命令行中,我打字:

python C:/Users/Username/Desktop/folder_name/copyselect.py 'C:/Users/Username/Desktop/folder_name' 'C:/Users/Username/Desktop/new_folder' 


有誰知道錯誤是防止這種腳本從運行命令行?謝謝。