最近学习Python,发现还是从解决问题的方向入手,更容易激起学习兴趣,通过学习解决平时遇到的问题,也可以获得成就感。为了方便自己随时使用,也是记录,准备在csdn上写一些本人学习的博客,并对博客内容做了分类,想到还是很长远哈。
本次是工作上遇到一个问题,批量修改文件内容(不要表头),一一产出对应新文件,并对应改成其他名字。我研究半天,也没能实现这个需求,看csdn上有很多其他类似的操作,我就打算一步步来,先从批量改名开始。这篇文章给我很大的帮助基于Python一次性批量修改多个文件的文件名_疯狂学习GIS的博客-CSDN博客_python给多个文件重命名
首先先建立了几个练习材料,这里我好像还特意用notepad++改成了UTF-8格式,不然没读取成功
引用库和地址,此块只用到了os库,re库是正则表达式用到,我这里还没这么复杂
import os
import re
import sys
path=r'E:\1.python\3.练习材料\修改文件/'
处理好新老名称对应关系,我是简单自己手写名称并放到一个dict里,大量的可以用Excel导入,都是放到dict里,旧值做key,新值做value。
a_name=('客户资料','学习资料')
b_name=('cust','study')
name_dict={}
for i in range(len(a_name)):
a=a_name[i]
b=b_name[i]
name_dict[a]=b
下面完全用的别人的代码,因为据说scandir在处理大量数据时会更快,就没有用listdir什么的了,定义一个函数,获取路径下(包括子文件夹)指定文件类型(此处为txt文件)的文件名
def scan_floder(srcpath,file_list):
""" 使用os自带的scan方法遍历文件夹 """
for item in os.scandir(srcpath):
if item.is_dir():
scan_floder(item.path,file_list)
elif item.is_file():
file = item.name #获取路径文件名
if file.endswith('.txt'): #挑选需要的文件
file_list.append(item.name)
因为这里我是直接替换文件名中文部分,因此我是截取了“_”号之前的中文和后缀编号,最后用了renames拼接了一下新文件的全名(12.11修改,加了if判断,非需要的文件不替换)
file_list =[]
scan_floder(path,file_list)
for file in file_list:
old_name=file
old_name_name_end=old_name.rfind('_')
old_name_start=old_name[:old_name_name_end]#名称
old_name_end=old_name[old_name_name_end+1:-4]#后缀
if old_name_start in a_name:
new_name_number=name_dict[old_name_start] #替换
os.renames(path+old_name,path+new_name_number+'_'+old_name_end+'.txt')
好了,一个简单的批量修改文件名就搞定了,各位大佬有什么好的建议和指点,欢迎教学