如何循环目录并重命名文件?

时间:2016-11-17 09:06:10

标签: python

我不喜欢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'

不确定我做错了什么。

2 个答案:

答案 0 :(得分:1)

folderName中使用path代替os.path.join(path, filename),因为folderName具有子文件夹的完整路径。

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

如果您要保存在一个文件夹中,请在newname中使用此文件夹,rename()会将文件移至新位置。

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

BTW:但你必须先创建这个文件夹。

os.mkdir('dir/common')

或从路径

创建文件夹和所有中间文件夹
os.makedirs('dir/common/many/sub/folders/to/create')

答案 1 :(得分:0)

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

您缺少子文件夹,这可以从错误消息中看出:'dir/employee.csv.bz2'