【发布时间】:2016-11-18 16:31:48
【问题描述】:
给定以下目录结构:
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
我想将扩展名从 csv.bz2 重命名为 .csv 并仅将扩展名为 .csv 的文件移动到新文件夹:
dir/all_files
我尝试过的是以下内容,它可以重命名但不会将文件移动到新方向:
path = 'dir/'
os.mkdir('dir/all_files')
extensions = ('.csv')
for folderName, subfolders, filenames in os.walk(path):
for filename in filenames:
ext = os.path.splitext(filename)[-1].lower()
if ext in extensions:
infilename = os.path.join(folderName, filename)
newname = os.path.join('dir', 'all_files', filename.replace('.csv.bz2', '.csv'))
output = os.rename(infilename, newname)
只移动第一个条目并导致错误:
output = os.rename(infilename, newname)
FileExistsError: [WinError 183] Cannot create a file when that file already exists: 'dir/2012-01-01\\employee.csv.bz2' -> 'dir/all_files\\employee.csv'
这当然是有道理的,因为我想移动所有标记为 employee.csv 的文件。
我的问题是如何将这些文件移动到all_files?
【问题讨论】:
-
您当前的工作目录是什么?也就是Python实例运行的目录?您在
dir/中的所有目录是否都以2012-开头? -
你需要给他们单独的名字,可能基于他们所在的目录,因为你不能在一个目录中有多个
employee.csv文件。 -
嗨,是的,
dir/以2012开头,但可能很快会更改为2013:)。 python 正在运行/usr/bin/python,当os.getcwd()时,当前工作目录为/home/myname/。我试图通过在newname上附加毫秒来给出唯一的名称,但它仍然会带来错误。我想我必须附加一种序列。我的python知识到此结束。 -
employee.csv.bz2你的意思是[Tom, Dick, Harry].csv.bz2,对吧?还是和你说的完全一样?在这种情况下,如果我们改名为Date-employee.csv.bz2可以吗,其中 Date 可以是 2012-01-01, 2012-01-02, ...? -
每个目录是否只包含一个
employee.csv.bz2文件?
标签: python file file-handling