要求:给出一个.txt文本,现在要做的是按照'=============='把单个文件分成三部分,对于这三部分,我们还要根据A、B把分出来的每一部分再分成两部分。
要进行文件操作,我们首先应该打开原文件:
f=open('E://test.txt','r')
即然说是被分成了三部分,并且以‘=====......’为分隔符,那么我们可以通过判断每一行是不是‘====='来判断是哪一部分。
如果说当前行不是'=====....'的话,我们应该记录下当前的数据,以便随后将数据读入文件中,所以我们应该在开始的时候开两个空列表,然后把数据存进去,当出现'=====..'的时候,我们只需把这些数据读入文件中就行了。
for each_text in f:
if each_text[:6]!='======':#判断是否是分割行
(first,second)=each_text.split(':',1)#判断A还是B,判断的标志是':’
if first=='A':
boy.append(second)#如果是A的话,就把A的':'后面的数据存储到boy列表中
elif first=='B':
girl.append(second)#同上,存储到girl列表中
else:#如果当前行是'=====...'的话,就把当前的数据存储到文件中(文件需要重新建立)
boy_file_name='boy_'+str(count)+'.txt'
girl_file_name='girl_'+str(count)+'.txt'#这里是给文件命名,别忘了加文件名后缀
boy_file=open(boy_file_name,'w')
girl_file=open(girl_file_name,'w')#这里是打开文件
boy_file.writelines(boy)
girl_file.writelines(girl)#这里是读入数据
boy_file.close()
girl_file.close()#这里是关闭文件
boy=[]
girl=[]
count+=1#操作完成后需要对列表进行清空操作,并且为了下次的命名,文件计数器需要加1
按照上述方法运行以后发现文件只有两个:
原因是我们通过‘======...'作为分隔条件的话,最后的那一部分不能考虑进去,所以在最后我们要在for循环结束之后重新创建文件,然后把数据读入进去!
原码如下:
f=open('E://test.txt','r')
boy=[]
girl=[]
count=1
for each_text in f:
if each_text[:6]!='======':
(first,second)=each_text.split(':',1)
if first=='A':
boy.append(second)
elif first=='B':
girl.append(second)
else:
boy_file_name='boy_'+str(count)+'.txt'
girl_file_name='girl_'+str(count)+'.txt'
boy_file=open(boy_file_name,'w')
girl_file=open(girl_file_name,'w')
boy_file.writelines(boy)
girl_file.writelines(girl)
boy_file.close()
girl_file.close()
boy=[]
girl=[]
count+=1
boy_file_name='boy_'+str(count)+'.txt'
girl_file_name='girl_'+str(count)+'.txt'
boy_file=open(boy_file_name,'w')
girl_file=open(girl_file_name,'w')
boy_file.writelines(boy)
girl_file.writelines(girl)
boy_file.close()
girl_file.close()
f.close()
但是这样写很乱,所以我们可以使用函数来简化代码,简化后的代码如下:
def write_file(boy,girl,count):
boy_file_name='boy_'+str(count)+'.txt'
girl_file_name='girl_'+str(count)+'.txt'
boy_file=open(boy_file_name,'w')
girl_file=open(girl_file_name,'w')
boy_file.writelines(boy)
girl_file.writelines(girl)
boy_file.close()
girl_file.close()
def split_file():
f=open('E://test.txt','r')
boy=[]
girl=[]
count=1
for each_text in f:
if each_text[:6]!='======':
(first,second)=each_text.split(':',1)
if first=='A':
boy.append(second)
elif first=='B':
girl.append(second)
else:
write_file(boy,girl,count)
boy=[]
girl=[]
count+=1
write_file(boy,girl,count)
f.close()
split_file()