python正则表达式匹配文件名_如何用python从文中获取文件名再用正则表达式批量修改文件名...

匿名用户

1级

2017-08-15 回答

第零步:问题的提出

我在网上购买了星火英语的六级晨读美文100篇(六级早已高分飘过,不过很喜欢这些文章,买来重新品味),但是发现其文章的命名都为01.txt或10.txt等。为了便于检索需要修改文件名称。

第一步:从文件中取出文件名。

我发现txt文件的第一行为文件名,格式为如:Passage 3. Three Passions I Have Lived for, 后面还有几个换行符。写下如下代码进行第一步修改:

[python] view plain copy

import os

x = 1

while x < 101:

if x < 10:

file_name = "0"+str(x) + ".txt" #10一下则前面补零

file = open(file_name)

else:

file_name = str(x) + ".txt"

file = open(file_name)

line = file.readline()

file.close()

os.rename(file_name,line) #重命名

x = x + 1

修改后文件名如下:

我发现这样也不好,因为文件名太长,移到window系统下出现错误;而且在Linux下无法读取。所以我要把前面没有用的东西去掉只留下文章的名字。

第二步,修改文件名

代码如下:

[python] view plain copy

import re

import os

import shutil

import time

dir = "/home/leo/Documents/starfire100_2/" #文件目录

if os.path.isdir(dir): #检验目录是否有误

print ("Directory exists!")

else:

print ("Directory not exist.")

time.sleep(5)

exit()

filelist=[]

filelist=os.listdir(dir)

#print filelist

for i in filelist:

tt_match = re.search(r'Passage\s{1,2}\d{1,3}\.?\s(.*)\n$',i) #匹配文件名,返回括号内的文章名

if tt_match:

NewFile = tt_match.group(1) #获取匹配名存为newfile

NewFile=i.replace(i,NewFile) # 修改

shutil.move(dir+i,dir+NewFile) #执行修改

第三步:手工修改

修改后运行

[plain] view plain copy

ls | grep 'Passage'

还有如下条目:

去除最后一条属于目录所以还有三条未得到修改,不过数量不多,手动修改解决。

得到如下效果:

第四步:去除换行符replace空格

将上面的代码修改一下以后得到如下代码

[python] view plain copy

import re

import os

import shutil

import time

#dir=raw_input("please input which Directory-Name to Rename:")

dir = "/home/leo/Documents/starfire100_2/"

if os.path.isdir(dir):

print ("Directory exists!")

else:

print ("Directory not exist.")

time.sleep(5)

exit()

filelist=[]

filelist=os.listdir(dir)

#print filelist

for i in filelist:

NewFile = i.strip('\n') #去除掉最后那个回车符

NewFile = re.sub(r'\s+','_',NewFile) #把所有的空格改为下划线

if NewFile[-1]=='_': #如果最后一个字符为下划线则去除

NewFile = NewFile[:-1] #去除最后一个下划线

shutil.move(dir+i,dir+NewFile)

得到如下效果,总算完成了

其实最后去除空格和回车符的代码可以加入修改文件名的代码之中,不过这个很容易就不修改了。

后续问题

我想我的解法一定不是最优的,因为只要找到第二个大写字母就可以匹配出来。如果您能告诉我如何实现或者您有更好的方法请多指教,谢谢!

  • 0
    点赞
  • 1
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:1024 设计师:我叫白小胖 返回首页
评论

打赏作者

weixin_39768444

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值