python常见的文本处理

您所在的位置:网站首页 如何生成fasta文件 python常见的文本处理

python常见的文本处理

2024-01-24 02:43| 来源: 网络整理| 查看: 265

1、需要将下面的fasta文件进行一个整理,将序列单行输出 在这里插入图片描述 方法一

f1 = open('test1.fa','r').readlines()#需要整理的文件 f2 = open('2.fasta','w')#整理之后的文件 for i in f1: if i.startswith('>'): f2.write('\n'+i) else: f2.write(i.strip("\n"))

结果如下,这样会有一个问题,输入的文件起始有一个空行 在这里插入图片描述 这时候怎么办呢? 我中间加了一次判断,如果第一次遇到>,则不进行换行

f1 = open('test1.fa','r').readlines()#需要整理的文件 f2 = open('2.fasta','w')#整理之后的文件 n = 0 for i in f1: if i.startswith('>'): n += 1 if n == 1: f2.write(i) else: f2.write('\n'+i) else: f2.write(i.strip("\n")) f2.close()

在这里插入图片描述 此时第一行的换行符就没有了。 方法二:该方法比较费内存,小文件的处理可以,太大了就不行了,主要思想就是建立一个字典,把id和序列存入字典中

f1 = open('test1.fa','r').readlines()#需要整理的文件 f2 = open('2.fasta','w')#整理之后的文件 a={} for i in f1: if i.startswith('>'): id = i.strip("\n") fa='' else: fa = fa + i.strip("\n") a[id]=fa for i in a: f2.write(i+'\n'+a[i]+'\n') f2.close()

2、当文件处理下面的情况,如何处理呢? 在这里插入图片描述 第一列是我的ID,第二列是序列,处理成fasta文件

f1 = open('1.txt','r').readlines()#需要整理的文件 f2 = open('1.fasta','w')#整理之后的文件 for i in f1[1:]:#有表头,如果无表头则将1:去掉 id = i.split('\t')[0] fa = i.strip('\n').split('\t')[1] f2.write('>'+id+'\n'+fa+'\n') f2.close()

在这里插入图片描述 3、有些人会说,如果我的ID有重复,但是重复的,想把序列加和到一起,最后输出,该怎么办呢?

f1 = open('1.fa','r').readlines()#需要整理的文件 f2 = open('2.fa','w')#整理之后的文件 a={} for i in f1: if i.startswith('>'): id = i.strip("\n")[1:]#去掉大于号 else: fa = i.strip("\n") if id in a: a[id]=a[id]+fa else: a[id]=fa for i in a: f2.write('>'+i+'\n'+a[i]+'\n') f2.close()

思想,先建一个字典,把id作为key,而序列作为value,每一次增加字典内容时,判断id是不是已经在a的key中存在,如果不存在,这时候直接将序列作为value,但是如果存在了,这是该id对应的就是已经存在的value加上现在的序列。f1读取结束后,再遍历字典,就可以了 总结: 1、open()打开文件,r代表读取,而w则是写入,a是追加 2、使用readlines()读取的文件,不需要关闭,但其他的文件是必须要关闭了,close就是关闭文件的意思 3、split是分割,而strip则是掉左右两端的某字符,这里用的是\n其实就是换行符 4、for循环和if判断语句



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3