2016-11-17 48 views
0

林滋腎到Python,所以我的問題的瑣碎道歉:如何遍歷目錄並重命名文件?

我有以下的文件結構,其中.csv文件與職工保存每天的基礎上:

dir/2012-01-01/employee.csv.bz2 
dir/2012-01-02/employee.csv.bz2 
dir/2012-01-03/employee.csv.bz2 
dir/2012-01-04/employee.csv.bz2 
dir/2012-01-05/employee.csv.bz2 

我想瀏覽每個文件並重命名它。之後,我想將新文件保存在一個公用目錄dir/common中。我試了一下:

import sys 
import os 


path = 'dir/' 

for folderName, subfolders, filenames in os.walk(path): 
    for filename in filenames: 
     infilename = os.path.join(path, filename) 
     newname = infilename.replace('.csv.bz2', '.csv') 
     output = os.rename(infilename, newname) 

但我得到的錯誤:

output = os.rename(infilename, newname) 
FileNotFoundError: [WinError 2] The system cannot find the file specified: 'dir/employee.csv.bz2' -> 'dir/employee.csv' 

不知道什麼即時做錯了。

+0

所有中間文件夾,如果你點擊'對終端LS DIR/employee.csv.bz2'發生了什麼? – Chr

+0

文件夾「dir/employee.csv.bz2」不存在。你錯過了路徑中的子文件夾!嘗試添加日期文件夾! –

+0

在'os.path.join(path,filename)'中使用'folderName'而不是'path',因爲當你轉到子文件夾時'folderName'將會擁有所有的子文件夾。 – furas

回答

1

使用folderName而不是pathos.path.join(path, filename),因爲folderName有子文件夾的完整路徑。

infilename = os.path.join(folderName, filename) 

如果你想要一個文件夾中保存,然後使用該文件夾中newnamerename()將文件移動到新的地方。

newname = os.path.join('dir', 'common', filename.replace('.csv.bz2', '.csv')) 

順便說一句:但你必須先創建這個文件夾。

os.mkdir('dir/common') 

或創建文件夾並從路徑

os.makedirs('dir/common/many/sub/folders/to/create') 
+0

謝謝。如何添加staement以將輸出文件保存在一個公共文件夾中? – Mamba

+0

'rename()'移動文件,如果你使用新名稱的不同文件夾 - 即。 'new_file = os.path.join('dir','common',filename.replace('。csv.bz2','.csv'))' – furas

+0

謝謝!!!!!! – Mamba

0

infilename = os.path.join(path, filename)

你缺少的子文件夾,從錯誤信息是明顯的:'dir/employee.csv.bz2'

相關問題