用python使文件名按照一定规则批量重命名

Python010

用python使文件名按照一定规则批量重命名,第1张

所用模块:import os

(一)打开文件夹,获得旧文件名

path=r"D:\exp\resultdata"   //文件夹途径

for (root, dirs, files) in os.walk(path):

os.walk(path)//遍历D:\exp\resultdata下文件

(二)获得新文件名(如何打开一个文件)

一般新文件名都保存在一个文件中

new_names_files=open('文件名.txt','r')

content=open('文件名.txt','r')(此时content是一个含有所有new name 的列表)

注意:对新名字(字符串)会有一些操作

(1)对文件名(字符)的分割

用split()进行分割

a=''wer.werrew/"

(2)list 添加新的元素、

用append()进行添加

(3)字典添加新的元素

用update()进行添加

实例:

(三)重命名

利用os.rename()函数

实例:旧名字与新名字的数字相对

file=['1.max','2.max'……]//旧名字

for file in files:

        oldname = os.path.join(root,file)

        namesp=file.split('.')

        new_namesp=d[int(namesp[0])]//数字相对

        newname = os.path.join(root,new_namesp)

        os.rename(oldname,newname)

# coding = utf-8

import os

path = "D:\\chunyu"#想要重命名所有文件存放的文件夹

filelist = os.listdir(path) #该文件夹下所有的文件(包括文件夹)

list = []

fileopen = open('D:\chunyu.txt','r')#之后想要重命名成的所有名字的集合,这个名字为除去文件扩展名的文件名

i =0

for file in filelist:

print(file)

for line in fileopen:

line = line.strip('\n')

list.append(line)#读取txt里面的所有名字的集合写入list文件

print(list)

fileopen.close()

for file in filelist: #遍历所有文件

Olddir=os.path.join(path,file) #原来的文件路径

if os.path.isdir(Olddir): #如果是文件夹则跳过

continue

filename=os.path.splitext(file)[0] #文件名

filetype=os.path.splitext(file)[1] #文件扩展名

Newdir=os.path.join(path,str(list[i])+filetype)

os.rename(Olddir,Newdir)#重命名

print(Olddir+" has changed as "+Newdir)

i = i+1

从语法上将 MultiIndex 与 .loc 集成在高级索引中是有些挑战性。通常, MultiIndex 的键采用元组的形式。例如

注意 : 虽然也可以使用 df.loc['bar', 'two'] ,但这种简写的符号通常会导致歧义

如果你还想用 .loc 索引某一列,你必须像这样使用一个元组

想要获取第一个级别的某一标签的所有元素,并不需要传递元组,例如

而不是使用 df.loc[('bar',),] (等价于 df.loc['bar',] )

当然,也可以进行切片

通过提供一个元组切片,选择范围内的值

传递一个标签或元组列表的工作原理类似于 reindex

需要注意的是,在 pandas 中,当涉及到索引时,元组和列表的处理方式并不相同。

元组被解释为一个多级键,而列表则用来指定多个键。或者换句话说,元组是横向的,列表是纵向的

您可以通过提供多个索引器来对 MultiIndex 进行切片

可以使用 slice(None) 选择该级别的所有内容,没有指定索引的级别默认为 slice(None)

通常,切片的两段都会包括在内,因为这是标签索引

在使用 .loc 的时候,最好同时指定索引(行)和标签(列),因为在某些情况下,传递的索引可能会被解析为两个轴而不是 MultiIndex

你应该使用

而不是

例如

使用切片,列表和标签的基本 MultiIndex 切片操作

你可以使用 pandas.IndexSlice 来让 : 语法显得更自然一些,而不是使用 slice(None)

可以使用这种方法在多个轴同时进行相当复杂的选择

您可以使用布尔索引器来进行与值相关的选择

您还可以为 .loc 指定 axis 参数,以在某一个轴上传递切片

此外,您可以使用以下方法设置这些值

也可以在等号右边使用可对齐对象

DataFrame 的 xs() 方法还接受一个 level 参数,以便更容易在 MultiIndex 的特定级别上选择数据

使用切片

您还可以为 xs 提供 axis 参数来选择列

使用切片

xs 还允许使用多个键进行选择

使用切片

您可以将 drop_level=False 传递给 xs ,以保留所选择的级别

使用 drop_level=True (默认值)与上面的结果比较

在 pandas 对象的 reindex() 和 align() 方法中使用 level 参数,可以在一个级别上广播值

swaplevel() 方法可以切换两个级别的顺序

reorder_levels() 方法是 swaplevel 方法的推广,允许你在一个步骤中排列分层索引级别

rename() 方法可用于重命名 MultiIndex 的标签,通常用于重命名 DataFrame 的列

rename 的 columns 参数允许指定需要重命名的列的字典

这个方法也可以用来重命名 DataFrame 主索引的特定标签

rename_axis() 方法用于重命名 Index 或 MultiIndex 的名称。

特别地,可以指定 MultiIndex 的级别名称,可以使用 reset_index() 将 MultiIndex 移动到列

注意 : DataFrame 的列是一个索引,因此使用 rename_axis 和 columns 参数可以改变该索引的名称

rename 和 rename_axis 都支持指定字典、 Series 或映射函数来将标签/名称映射到新值

当直接使用 Index 对象而不是通过 DataFrame 工作时,可以使用 Index.set_names() 来更改名称

您不能通过 level 设置 MultiIndex 的名称

使用 Index.set_names() 替代