如何遍历目录并重命名文件?
问题描述:
林滋肾到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'
不知道什么即时做错了。
答
使用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'))
顺便说一句:但你必须先创建这个文件夹。
os.mkdir('dir/common')
或创建文件夹并从路径
os.makedirs('dir/common/many/sub/folders/to/create')
答
infilename = os.path.join(path, filename)
你缺少的子文件夹,从错误信息是明显的:'dir/employee.csv.bz2'
。
所有中间文件夹,如果你点击'对终端LS DIR/employee.csv.bz2'发生了什么? – Chr
文件夹“dir/employee.csv.bz2”不存在。你错过了路径中的子文件夹!尝试添加日期文件夹! –
在'os.path.join(path,filename)'中使用'folderName'而不是'path',因为当你转到子文件夹时'folderName'将会拥有所有的子文件夹。 – furas