如何将文件从不同目录重命名并移动到一个公共目录?

时间:2016-11-18 16:31:48

标签: python file file-handling

给出以下目录结构:

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

2 个答案:

答案 0 :(得分:2)

您的问题是您将所有文件放在同一目录中,它们都具有相同的名称。您可以根据第一个文件夹的名称重命名它们。这段代码应该有效:

--ignore-installed

答案 1 :(得分:-1)

如果您在问题中陈述的所有内容都是真的,以下内容将是您问题的直接解决方案:

import os
import re

path = 'dir/'

# os.mkdir(path+'all_files')
os.system('ls '+path+' > '+path+'dirList.txt');

with open(path+'dirList.txt') as f:
    for line in f:
        if re.match('[1-9]',line):
            os.system('mv '+path+line.strip()+'/employee.csv.bz2 '
                      +path+'all_files/'+line.strip()+'-employee.csv')

os.system('rm '+path+'dirList.txt') # Optional delete the temporary file

我模拟了您的问题陈述并验证了上述代码,它特别适用于基于Unix和Linux的操作系统,如Mac和Ubuntu。