要求:给出一个.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()