有个原始文件格式如下,要实现通过python脚本把以下内容分割成小文件并按照指定的格式重命名。
原始文件为txt格式,内容如下:
this is file a
4567890
################
this is file b
ertyui56789
tyui
################
this is file c
ertyuiop56789ukl‘’hj
输出内容:
1,包含3个txt文件,名字分别为this is file a/b/c
2,每个txt文件里面包含对应的内容,比如 this is file a里面包含:
this is file a
4567890
import re
p = re.compile('################',re.S)
f = open(r"D:\pythonProject\m.txt","r",encoding='UTF-8').read()
paralist = p.split(f)
total_num = len(paralist)
for paraindex in range(total_num):
filewrite=open( r"D:\pythonProject\\" + str(paraindex) + ".txt",'w')
filewrite.writelines(paralist[paraindex])
filewrite.close()
报错:
raise source.error("multiple repeat",
re.error: multiple repeat at position 3
@Robin_Wang: 不知道你是哪个版本,py3 正常执行,不会报错
@风行天下12: 我的是3.8,刚试了一下有2个问题:
1,简单的几行不会报错,但是文件名不是每个段落的第一行,而是数字0,1,2,3.。。。
2,我实际的文件非常大(几百兆),里面这样的段落也非常多(几十个到一百多个),运行的时候就会报multiple repeat的错误
可以边读便写
原始文件是file_txt
f=open(file_txt,'r')
tmp=[]
newfilelines=[]
for line in f:
if line.find("#")!=-1:
newfilelines.append(tmp)
tmp=[]
contiue
if line.find("This is file")!=-1:
tmp.append(line)
tmp.insert(0,line)#记录文件名
f.close()
for file in newfilelines:
filename=file[0]
with open(filename,'w') as f:
f.writelines(file[1:])
报错:
filename=file[0]
IndexError: list index out of range
@Robin_Wang:
这个跑了一下,可以
f=open("file.txt",'r',encoding="utf-8")
tmp=[]
newfilelines=[]
for line in f:
if line.find("#")!=-1:
newfilelines.append(tmp)
tmp=[]
continue
if line.find("this is file")!=-1:
tmp.append(line)
tmp.insert(0,line.strip())#记录文件名
continue
tmp.append(line)
else:
newfilelines.append(tmp)
f.close()
for file in newfilelines:
filename=file[0]
with open(filename,'w') as f:
f.writelines(file[1:])
@超级大懒虫vip:
文件名的规则是文件内容的第一行内容,格式是不一样的,所以if line.find("this is file")!=-1:这种方式不可取。
@Robin_Wang:
那你是要回答者盲猜么?
有什么识别flag,你替换一下不就行行了?
@超级大懒虫vip:
没有固定的关键字,唯一的规律就是内容的第一行有效字符,如果第一行是空白行就是第二行。