Python使用子串最佳实践重命名文件名

时间:2015-04-22 19:15:44

标签: python-2.7 etl

简化,我有一个数据文件:

P.A2057.ACO.QASSGN.D150218.T1200333.xls

我成功将其复制到目录" MSSP_DATA_ARCHIVE"这里的文档:

dest_dir = "C:/Users/Office/Desktop/TEST/MSSP_DATA_ARCHIVE/"
for file in glob.glob(r'C:/Users/Office/Desktop/TEST/LOAD/*.xls'):
    print file
    shutil.copy(file, dest_dir)

我想重命名仍然坐在" LOAD"对此:

QASSGN.xls

我不会每月知道文件的确切名称(对于某些元素,似乎至少部分是随机生成的)。

我希望将当前文件名子串起来以提取上面所需的名称。

以下是我的开始:

for file in glob.glob(r'C:/Users/Office/Desktop/TEST/LOAD/*.xls'):
    parts = file.split('.') 

    parts = ['C:/Users/Office/Desktop/TEST/LOAD\\P',
             'A2057', 'ACO', 'QASSGN', 'D150218', 'T1200333','xls']

我知道必须有更好的方法来处理 os.path.splitext os.rename ,以避免进入"魔术数字&#34 ;麻烦。不是非常pythonic。

任何指示都将非常感谢!

1 个答案:

答案 0 :(得分:1)

这假设您的输入始终作为文件名中第4部分的所需名称。只有一件事是一个神奇的数字,因为我不知道你希望你的数据被命名的另一种方式。

# the path of your files
path = 'C:\\Users\\Office\\Desktop\\TEST\\LOAD'
# the place you want to output your files
# set to input because i have no idea where you want them
dest_path = path
# the type of files you want to rename
ext = r'xls'

# file will contain the path of the file
for file in glob.glob('{path}\\*.{ext}'.format(path=path, ext=ext)):
    # the filename we are going to change (dont want the path at all)
    name = file.split('\\')[-1]

    # the new name of the file
    new_file = '{path}\\{name}.{ext}'.format(
        path=dest_path,
        name=name.split('.')[3],
        ext=ext
    )

    os.rename(file, new_file)