python对文件进行分割 python文件分割符_读入文件

要求给出一个.txt文本,现在要做的是按照'=============='把单个文件分成三部分,对于这三部分,我们还要根据A、B把分出来的每一部分再分成两部分。

要进行文件操作,我们首先应该打开原文件:

f=open('E://test.txt','r')

python对文件进行分割 python文件分割符_python对文件进行分割_02

即然说是被分成了三部分,并且以‘=====......’为分隔符,那么我们可以通过判断每一行是不是‘====='来判断是哪一部分。

如果说当前行不是'=====....'的话,我们应该记录下当前的数据,以便随后将数据读入文件中,所以我们应该在开始的时候开两个空列表,然后把数据存进去,当出现'=====..'的时候,我们只需把这些数据读入文件中就行了。

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

按照上述方法运行以后发现文件只有两个:

python对文件进行分割 python文件分割符_读入文件_03

原因是我们通过‘======...'作为分隔条件的话,最后的那一部分不能考虑进去,所以在最后我们要在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()