时间:2021-05-22
以下是DNA序列,存储在window下F:\perl\data.txt里面:
复制代码 代码如下:
AAAAAAAAAAAAAAGGGGGGGTTTTCCCCCCCC
CCCCCGTCGTAGTAAAGTATGCAGTAGCVG
CCCCCCCCCCGGGGGGGGAAAAAAAAAAAAAAATTTTTTAT
AAACG
下面是程序:
复制代码 代码如下:
#下面的程序是用来计算一段DNA序列中ATGC的数量的
#首先定义四种碱基的数量为0
$count_A=0;
$count_T=0;
$count_C=0;
$count_G=0;
#首先要先把序列进行合并成一行
#先确定所要处理的文件的路径及文件名(在windows系统下面要按照这样的例子写
#f:\\perl\\data.txt
print "please input the Path just like this f:\\\\perl\\\\data.txt\n";
chomp($dna_filename=<STDIN>);
#打开文件
open(DNAFILENAME,$dna_filename)||die("can not open the file!");
#将文件赋予一个数组
@DNA=<DNAFILENAME>;
#以下两步要把所有的行合并成一行,然后去掉所有的空白符
$DNA=join('',@DNA);
$DNA=~s/\s//g;
#将DNA分解成,然后赋值到数组
@DNA=split('',$DNA);
#然后依次读取数组的元素,并对四种碱基的数量进行统计
foreach $base(@DNA)
{
if ($base eq 'A')
{
$count_A=$count_A+1;
}
elsif ($base eq 'T')
{
$count_T=$count_T+1;
}
elsif ($base eq 'C')
{
$count_C=$count_C+1;
}
elsif ($base eq 'G')
{
$count_G=$count_G+1;
}
else
{
print "error\n"
}
}
#输出最后的结果
print "A=$count_A\n";
print "T=$count_T\n";
print "C=$count_C\n";
print "G=$count_G\n";
下面是运行的结果:
复制代码 代码如下:
F:\>perl\a.pl
please input the Path just like this f:\\perl\\data.txt
f:\\perl\\data.txt
error
A=40
T=17
C=27
G=24
F:\>
大家可能观察到有一个error的出现,这是为什么呢?
大家仔细看一看最上面的原始 DNA序列,用特殊颜色标记的,可以看到有一个V,所以会输出错误。
这里把DNA序列经过整合成一行,然后去除所有的空白字符以后,又把$DNA通过split函数变成了数组,然后进行统计,那有没有更好的办法呢?
其实perl里有一个函数,substr。
我们先来看一看这个函数的用法,substr是针对一个大字符串的操作符(The substr function works with only a part of a larger string )言外之意就是对一个很长的字符串,进行片段化处理,取其中的一部分。我们这里用到的就是这个特性。
$little_string =substr($large_string,$start_position,$length)
$小片段=substr($大片段,$你要截取的小片段的起始位置,$你要截取的长度)
我们这里为了统计DNA中各种碱基的数量,所以要处理的字符串是一个碱基,所以我们要把$length设置为1。这样才能够满足我们的需求。
下面我们把修改过的代码写下:
复制代码 代码如下:
#下面的程序是用来计算一段DNA序列中ATGC的数量的
#首先定义四种碱基的数量为0
$count_A=0;
$count_T=0;
$count_C=0;
$count_G=0;
#首先要先把序列进行合并成一行
#先确定所要处理的文件的路径及文件名(在windows系统下面要按照这样的例子写
#f:\\perl\\data.txt
print "please input the Path just like this f:\\\\perl\\\\data.txt\n";
chomp($dna_filename=<STDIN>);
#打开文件
open(DNAFILENAME,$dna_filename)||die("can not open the file!");
#将文件赋予一个数组
@DNA=<DNAFILENAME>;
#以下两步要把所有的行合并成一行,然后去掉所有的空白符
$DNA=join('',@DNA);
$DNA=~s/\s//g;
#然后依次读取字符串的元素,并对四种碱基的数量进行统计
for ($position=0;$position<length $DNA;++$position)
{
$base=substr($DNA,$position,1);
if ($base eq 'A')
{
$count_A=$count_A+1;
}
elsif ($base eq 'T')
{
$count_T=$count_T+1;
}
elsif ($base eq 'C')
{
$count_C=$count_C+1;
}
elsif ($base eq 'G')
{
$count_G=$count_G+1;
}
else
{
print "error\n"
}
}
#输出最后的结果
print "A=$count_A\n";
print "T=$count_T\n";
print "C=$count_C\n";
print "G=$count_G\n";
得到的结果如下:
复制代码 代码如下:
F:\>perl\a.pl
please input the Path just like this f:\\perl\\data.txt
f:\\perl\\data.txt
error
A=40
T=17
C=27
G=24
F:\>
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
通过python对多个txt文件进行处理读取路径,读取文件获取文件名,路径名对响应的文件夹名字进行排序对txt文件内部的数据相应的某一列/某一行进行均值处理写入
PYTHONPandas批量读取csv文件到DATAFRAME首先使用glob.glob获得文件路径。然后定义一个列表,读取文件后再使用concat合并读取到的
本文与《【Java】读取其下所有文件夹与文件的路径》(点击打开链接)为姊妹篇,主要讲述Python对于文件信息的读取操作。Python对于文件信息的读取操作,在
Jupyter是一个在线的代码编辑工具,想要调用本地的文件则需要切换路径到相应的文件路径下切换路径要在打开Jupyter之前完成操作:cd空格+文件路径盘符:示
Python读取文件夹下的所有文件os.listdir(path)是得到在path路径下所以文件的名称列表。open(path)是打开某个文件。iter是pyt