python怎么用批量删除txt中固定内容

要求是这样,Python3.x
我有一组txt,文件都很大,开头结尾有内容需要删除,同目录下有txt文件a.txt,里面放置需要删除的内容,开头一行,结尾一行,那组txt删除的开头内容后面有用<>括起的字符串,将当前txt名修改为这串字符

假设原文件名是:1.txt

其开头一行是:21312435<example>34rdrt7654

需要一个函数

import re,os
def change_rename(filename="1.txt",deleted="a.txt"):
   lines=open(filename,'r').readlines()
   newname=re.findall(r'<[\w]*>',lines[0])[0][1:-1] #get new file name from line 1
   open(newname,'w').write(''.join(lines[1:-1])) #write to new file
   open(deleted,'a').write(lines[0]+lines[-1]) #save deleted info
   os.remove(filename) #delete old file
   
#接下里批量处理
oldfiles=os.listdir('.')
for i in oldfiles:
    if i!='a.txt':
        change_rename(i)

  

 把这段代码保存下来,放到你txt文件所在的目录,运行之。因为没有见到文件,为了保险起见,先用复制出一两个文件测试一下!!!删除后是不进回收站的!如果你看得懂,就自行修改吧。

追问

有没有简单点的方案,要删除的其实很少,拷贝一遍处理,1G多的txt让我如何是好

txt的文件名是从1到1000多,数字有中断,文件名固定在开头3~4行

追答

1G多的,早说这么大,我就不费这劲写了!总之,文件名不是问题,这代码里面有,就是re正则。文件太大,抱歉我帮不上忙了。你需要找专门处理大文件的方法。另寻高明吧。

追问

额,有没有方法能将第一行和最后两行替换成空白,正则改名的方式我能写

追答

用r+模式打开文件,seek调整位置,write覆盖成空格。注意计算需要覆盖的字符串长度。你先声明多大,写代码才有的放矢。如果只是为了美观,建议还是不要调整了。毕竟对数据心知肚明,处理用到的时候忽略掉就可以了。

追问

我用os.rename能够成功重命名但是文件大小会变为一是怎么回事

追答

os.rename('oldname.txt','newname.txt')这样用。是不是用错了?另外上面说的方法举例:

open('a.txt','w').write('123456789')
a=open('a.txt','r+')
a.seek(3)
a.write('X')
a.close()
open('a.txt','r').read()
'123X56789'

追问

额,我是这样用的,rename后txt没有大小,而且文件名乱码,print发现是gbk显示异常,我把它转换成UTF8,然后rename,依旧显示异常,大小几乎没有,中文的重命名问题?

追答

估计是。编码问题decode encode一通试试吧,情况也是非常多的,不过总有一个方法会成功的。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-06-18
你好:
能不能详细描述下;
这是不能说明问题的!追问

我有一组txt,文件都很大,开头结尾有内容需要删除,那组txt删除的开头内容后面有用括起的字符串,将当前txt名修改为这串字符,同目录下有txt文件a.txt,里面放置需要删除的内容,开头一行,结尾一行
拜托了

相似回答