Python如何实现将一个文件夹里面的文件重命名并放到另外一个文件夹里面?

文件夹A里面有一批文件的名称为:xy_abc_rnk.mol,xy_abec_rnk.mol,xy_adsdfop_rnk.mol...等类似这样的文件,如何编写代码实现... 文件夹A里面有一批文件的名称为:xy_abc_rnk.mol, xy_abec_rnk.mol, xy_adsdfop_rnk.mol...等类似这样的文件,如何编写代码实现将A文件夹里面的文件名称都改为abc.mol, abec.mol, adsfop.mol...(去掉名称前的xy_和名称后_rnk)并将这些改名后的文件放到B文件夹里面。 展开
 我来答
weiliming002
2016-06-20 · TA获得超过119个赞
知道小有建树答主
回答量:70
采纳率:100%
帮助的人:48.3万
展开全部
import re
import os

def get_file_list(folder):
    file_list = []; 
    for root, dirs, files in os.walk(folder):
        for f in files:
            path=root+os.path.sep+f
            file_list.append(path)
    return file_list

def get_re_file_list(file_list,re_rule):
    file_list_re=[]
    for file_path in file_list:
        if re.search(re_rule,file_path):
            file_list_re.append(file_path)
    return file_list_re

def rename_basename(file_list_re,re_rule,new_str):
    re_c = re.compile(re_rule)
    new_file_list = []
    for file_path in file_list_re:
        old_base_name=os.path.basename(file_path)
        new_base_name=re_c.sub(new_str,old_base_name)
        new_full_path=os.path.join(os.path.dirname(file_path),new_base_name)
        new_file_list.append (new_full_path)
    return new_file_list

def rename_dir(root,new_root,file_list):
    new_file_list=[]
    re_c = re.compile(root)
    for file_path in file_list:
        new_file_path=re_c.sub(new_root,file_path)
        new_file_list.append(new_file_path)
    return new_file_list    

def rename2list(old_list,new_list):
    for i in range(0,len(old_list)):
        os.rename(old_list[i],new_list[i])
        
def main():
    root=r"/home/user1/exp1"
    old_dir="exp1"
    new_dir=r"exp2"
    re_rule="xy_|_nk"
    new_str=""

    old_file_list=get_file_list(root)
    re_file_list=get_re_file_list(old_file_list,re_rule)
    new_basename_list=rename_basename(re_file_list,re_rule,new_str)
    new_dir_list=rename_dir(old_dir,new_dir,new_basename_list)
    rename2list(re_file_list,new_dir_list)

if __name__ == '__main__':
    main()
匿名用户
2016-06-20
展开全部
#!/usr/bin/env python
# coding: utf-8

import os
import re
import glob
import shutil

for file in glob.glob('./a/*.mol'):
    basefile = os.path.basename(file)
    _, name, _ , ext = re.split('_|\.', basefile)
    shutil.move(file, './b/%s.%s' % (name, ext))
追问
运行出错了:
Traceback (most recent call last):
File "take_out_ligand.py", line 11, in
_, name, _ , ext = re.split('_|\.', basefile)
ValueError: too many values to unpack

这个怎么修改?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式