2012-11-23 52 views
0

我有一個txt文件,其中在每一行中我有文件和文件夾的路徑,我想分離到一個地方。Python的功能將所有文件和文件夾移動到目標文件夾

這個列表在我的list.txt文件中是這樣的。 每個條目從一個新行開始。

C:\xxx\xxy 
C:\abc\def\ghi.pdf 

,我的目標文件夾是C:\用戶\ mr_a \ DEST

我想:

1.將目錄xxy及其所有文件和子文件夾到dest

2.將ghi.pdf文件移動到dest

list.txt文件中的其他條目執行相同操作。 所以我dest目錄將如下所示:

dest\xxy 
dest\ghi.pdf 

我看着shutil但我不肯定還是要使用哪個函數。 它說destination目錄不應該已經存在,但在我的情況下它不是。我很困惑使用哪些方法。 也請註明,如果你所提到的方法是安全的(我不希望任何可怕的傷口正貼在那裏我的文件位可能失蹤等)

什麼我問的是:用什麼方法在這裏完成我需要做的事情?

編輯:我使用Windows,而不是Linux或任何Unix系統

+0

我經歷了'shutil'文檔,其中坦率地說我無法決定使用哪種方法。這就是我在這裏問的原因。 –

+0

應該認爲一個簡單的os.walk加上os.path.isdir和os.mkdir應該可以做到這一點 – daramarak

+0

對'shutil的調用。移動「和一個容器,以跟蹤最淺的dirs應該做 – inspectorG4dget

回答

0
with open('list.txt') as f: 
    for line in f: 
     shutil.move(line, dest) 
+0

但是它會合並目錄dir的情況:dest/dir/a.txt src/dir/b.txt?我相信這是@ronnieaka的問題的一部分 –

0

退房osos.path。你會發現像一些有用的功能:

  • os.path.exists - 檢查的路徑是否存在(如您的目的地路徑)
  • os.makedirs - 創建一個目錄(包括失蹤父目錄)
  • os.path.isdiros.path.isfile - 檢查是否該路徑包含一個目錄或一個文件。
  • os.path.basename - 切割出的文件名的路徑
  • os.path.join的 - 連接路徑(或路徑與文件名)

這裏是一個代碼示例,我沒有嘗試:

if not os.path.exists(dest): 
    os.makedirs(dest) 
with open('list.txt', 'r') as f: 
    for line in f.readlines(): 
     filepath = line.strip() 
     filename = os.path.basename(filepath) 
     shutil.move(filepath, os.path.join(dest, filename)) 
+1

只是'shutil.move(filepath.strip(),dest)' 做到了。謝謝。 只有我必須做的主要改變是添加strip()否則我得到'IOError:[Errno 22]無效模式('rb')或文件名:'C:\\\\ Python27 \\\\ b \ n '' 而且我不得不用'dest'變量中的雙反斜槓替換所有單反斜槓。 'DEST = 「C:\ Python27 \一個」'給: '文件 「C:\ Python27 \我\ batchmove.py」,5號線,在 os.makedirs(DEST) ... WindowsError :[錯誤123]文件名,目錄名稱或卷標語法不正確:'C:\\ Python27 \ x07'' –

相關問題