# Python脚本制作获得fasta文件单编码序列信息内容完成

> 作者/来源: UCloud 运营管理员
> 发布时间: 2022-12-21T09:49:00.000Z
> 分类: 解决方案
> 标签: Linux, Python
> 原文链接: http://117.50.162.249:3000/yun/articles/2008

---

# Python脚本制作获得fasta文件单编码序列信息内容完成

> 来源: https://www.ucloud.cn/yun/128694.html
> 作者: 89542767
> 发布日期: 发布于2022-12-21 17:49

这篇文章主要为大家介绍了Python脚本提取fasta文件单序列信息实现示例，有需要的朋友可以借鉴参考下，希望能够有所帮助，祝大家多多进步，早日升职加薪

　　此篇文章关键给大家介绍了Python脚本制作获得fasta文件单编码序列信息内容完成实例，感兴趣的小伙伴可以参考借鉴一下，希望可以有一定的帮助，祝愿大家多多的发展，尽早涨薪

　　Python脚本制作编写

　　应用Python对fasta格式编码序列开展基本资料统计分析

　　预估设计方案导出文件中包括fasta文件名，编码序列长短，GC成分及其ATCG分别含量。

　　应用文件

　　test.fasta

　　stat.py

　　输入sys模块

```
　　#!/usr/bin/env python
　　import sys
```

　　从命令行获得文件名称

```
　　file_fasta=sys.argv[1]
　　#获得文件名
　　file_name=file_fasta.split('.')
　　name=file_name[0]
```

　　sys.argv[1]模块是从程序外部获取参数的桥梁，可以将命令行的参数输入到py程序内。

　　sys.argv[0]是程序本身，sys.argv[1]是程序后跟着第一个参数。

　　我们将要文件夹名称做为输入数据，这步最后运行有展现。

　　在完毕导出的时候会导出1个包括统计信息的txt文件，我们将要用fasta文件名做为txt文件的作为前缀，因此我们必须获得fasta文件的名称。

　　.split('.')是把file\_fasta以.为分节符分离会形成'test','txt'，取值给file\_name则file\_name会蕴含着两个字符。

　　file\_name[0]乃是取首个值'test'，python中默认设置首个数是0，所以无法键入1。

　　开展编码序列数据汇总的函数公式

　　编码序列长度非常好统计分析使用len函数就可以，可是GC成分和ACTG的百分比换算必须费点事儿。

　　使用def制做一个函数

　　Python使用def开始函数定义，紧接着是函数名，括号内部为函数的参数，内部为函数的具体功能完成代码

```
　　def get_info(chr):
　　chr=chr.upper()
　　count_g=chr.count('G')
　　count_c=chr.count('C')
　　count_a=chr.count('A')
　　count_t=chr.count('T')
```

　　命名这个函数为get\_info，内部参数为chr

　　在咱们会将fasta中ATCG的碱基内容赋值给chr，碱基可能有大写有小写，所以我们使用.upper将所以字符变成大写。

　　再使用.count('G')统计ATCG各自的数量并赋值给对应count\_g，我们用ATCG各自的统计数可以在后面计算中免疫N值干扰。

```
　　gc=(count_g+count_c)/(count_a+count_t+count_c+count_g)
　　A=(count_a)/(count_a+count_t+count_c+count_g)
　　T=(count_t)/(count_a+count_t+count_c+count_g)
　　C=(count_c)/(count_a+count_t+count_c+count_g)
　　G=(count_g)/(count_a+count_t+count_c+count_g)
　　gc_con='{:.2%}'.format(gc)
　　A_content='{:.2%}'.format(A)
　　T_content='{:.2%}'.format(T)
　　C_content='{:.2%}'.format(C)
　　G_content='{:.2%}'.format(G)
　　return(gc_con,A_content,T_content,C_content,G_content)
```

　　gc含量计算其等于（G的数量+C的数量）/（A的数量+T的数量+C的数量+G的数量）

　　A的含量等于（A的数量）/（A的数量+T的数量+C的数量+G的数量），其他值的计算以此类推。

　　.format使用：

　　"{1}{0}{1}".format("hello","world")设置指定位置。

　　'world hello world'

　　{:.2f}保留小数点后两位

　　最后，使用return返回函数结果(gc\_con,A\_content,T\_content,C\_content,G\_content)

　　进行函数计算

```
　　#进行函数计算
　　with open(file_fasta,'r')as read_fa:
```

　　读取文件内容赋值给read\_fa

　　python中有两个方式打开文件一种是直接使用open("test.fasta","r")，执行完以后f.close()关闭。

　　注释："r"只读模式打开文件；"w"以只写模式打开文件，这种模式下输入内容会覆盖原有内容；"a"以追加模式打开一个文件,这个模式会把新内容追加到原有内容的末尾，不会覆盖。

　　这里使用的是第二方式with内置函数，它可以将文件自动关闭。

```
　　for val in read_fa:
　　val=val.strip()
　　if not val.startswith("&gt;"):
　　seq_info=get_info(val)
　　len_fasta=len(val)
```

　　将read\_fa内容赋值给val。

　　strip()方法用于移除字符串头尾指定的字符(默认为空格或换行符)，这里使用默认。

　　然后使用startswith()方法用于检查字符串是否是以指定子字符串开头，在当不是&gt;开头的行时候，才对核酸序列才进行信息统计。

　　len()方法返回字符长度获得片段长度

　　结果屏幕展示

　　#结果屏幕展示

　　print('\*\*\*\*\*\*n{0}nlength:{1}ngc content:{2}nA content:{3}nT content:{4}nC content:{5}nG content:{6}n\*\*\*\*\*\*'.format(name,len\_fasta,seq\_info[0],seq\_info[1],seq\_info[2],seq\_info[3],seq\_info[4]))

　　使用n进行换行，用.format指定值输出位置。

　　结果输出文件

　　os.write(fd,str)

　　write()方法用于写入字符串到文件描述符fd

　　#结果输出文件

```
　　file_output=open("{}sum.txt".format(name),'a')
　　file_output.write('******n')
　　file_output.write('{}n'.format(name))
　　file_output.write('length:{:d}n'.format(len_fasta))
　　file_output.write('gc content:{}n'.format(seq_info[0]))
　　file_output.write('A content:{}n'.format(seq_info[1]))
　　file_output.write('T content:{}n'.format(seq_info[2]))
　　file_output.write('C content:{}n'.format(seq_info[3]))
　　file_output.write('G content:{}n'.format(seq_info[4]))
　　file_output.write('******')
　　file_output.close()
```

　　脚本运行

　　执行脚本（linux系统）

![01.png](https://ucloud-blog.cn-bj.ufileos.com/articles/128694/images/128694_000.png)

　　使用ls命令可以看到当前目录下有已经写好的py文件以及数据test.fasta。

　　运行时注意我们编写时设置从命令行获得文件名称，所以要在后面跟上fasta文件，这样才能成功运行。

　　运行结束后可以看见屏幕上有结果的打印，同时也生成了testsum.txt。

　　使用cat命令查看可以看到结果。