2016-11-17 47 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'

相关问题