利用python进行数据分析(八)

第三章

3.3文件读取与写入
当前工作目录下有一个名为in_file.txt的文本文档,其以fasta格式保存了一段蛋白序列:

>WP_006042265.1
MSTAIAQQKIRIRLKAFDRRMLDLSCDKIIETADNTAATAIGPIPLPTKRKIYCVLRSPHVDKDSREHFETRTHRRIIDI
YSPSAKTIDALMKLDLPSGVDIEVKL

1)读取整个文件

>>>with open('in_file.txt') as file_object:
	   contents = file_object.read()
>>>print(contents)
>WP_006042265.1
MSTAIAQQKIRIRLKAFDRRMLDLSCDKIIETADNTAATAIGPIPLPTKRKIYCVLRSPHVDKDSREHFETRTHRRIIDI
YSPSAKTIDALMKLDLPSGVDIEVKL
#出现一个空行

首先使用with-open方法打开文件,open()接受要打开文件所在的目录和文件名,不提供目录的话则在当前文件夹下寻找文件,使用了with则不需要在访问文件后再将其关闭。也可以使用open()close()方法来打开和关闭文件,但是有时候忘了关闭文件或者未妥善的在错误的时间关闭文件会造成错误。
然后使用方法read()来读取这个文件的全部内容,并将其作为一个字符串存在变量中,打印变量后发现最后多出了一个空行,这个空行不是文件内容所带的,而是read()在到达文件末尾时返回的一个空字符串,要删除末尾的空行,可以在print语句中使用rstrip()

>>>print(contents.rstrip())
>WP_006042265.1
MSTAIAQQKIRIRLKAFDRRMLDLSCDKIIETADNTAATAIGPIPLPTKRKIYCVLRSPHVDKDSREHFETRTHRRIIDI
YSPSAKTIDALMKLDLPSGVDIEVKL

2)文件路径
上面提到了with-open方法中,open()默认在当前工作工作目录中查询文件,但是也可以接受文件路径,但是要注意的是windows中文件路径使用的是反斜杠(\)而不是斜杠(/),而且当文件路径较长时,可以将其存在一个变量中,在将其传递给open()方法,但有时python不能很好的处理反斜杠,这时候在路径字符串前加上"r",以原始字符创方式指定路径。

>>>file_path = r'C:\User\practice\in_file.txt'
>>>with open(file_path) as file_object:

3)逐行读取
更多的情况下,我们需要逐行读取数据,并对其进行检查,可以对文件使用for循环:

>>>with open('in_file.txt') as file_object:
	   for line in file_object:
		   print(line)
		   
>WP_006042265.1

MSTAIAQQKIRIRLKAFDRRMLDLSCDKIIETADNTAATAIGPIPLPTKRKIYCVLRSPHVDKDSREHFETRTHRRIIDI

YSPSAKTIDALMKLDLPSGVDIEVKL

使用for循环读取每一行,发现空行更多了,这是因为每行的末尾都有一个换行符,而且print语句也是默认在最后添加换行符的,因此每行的末尾其实是有两个换行符的,要消除这些空白行,还在要在print语句中使用rstrip()
4)将文件中各行内容存入一个列表中:
上面我们使用了read()方法将文件全部内容读取到了一整个的字符串中,现在我们使用readlines()方法将文件中每一行的内容存储在一个列表中:

>>>with open('in_file.txt') as file_object:
	   lines = file_object.readlines()
>>>print(lines)
['>WP_006042265.1\n', 'MSTAIAQQKIRIRLKAFDRRMLDLSCDKIIETADNTAATAIGPIPLPTKRKIYCVLRSPHVDKDSREHFETRTHRRIIDI\n', 'YSPSAKTIDALMKLDLPSGVDIEVKL']

通过打印,我们发现每行末尾的换行符也被存入了列表中,如果我们想要使用其中的内容,可以通过for循环遍历其中内容,但要记得去掉换行符:

>>>for line in lines:
	   print(line.strip())
>WP_006042265.1
MSTAIAQQKIRIRLKAFDRRMLDLSCDKIIETADNTAATAIGPIPLPTKRKIYCVLRSPHVDKDSREHFETRTHRRIIDI
YSPSAKTIDALMKLDLPSGVDIEVKL

很明显这样的方法有些麻烦,要将文件中的每行内容存入列表,还有更好的方法:

>>>lines2 = []
>>>with open('in_file.txt') as file_object:
	   for line in file_object:
		   lines2.append(line.strip())
>>>print(lines2)
['>WP_006042265.1', 'MSTAIAQQKIRIRLKAFDRRMLDLSCDKIIETADNTAATAIGPIPLPTKRKIYCVLRSPHVDKDSREHFETRTHRRIIDI', 'YSPSAKTIDALMKLDLPSGVDIEVKL']

既然这里是创建列表,那我们还可以利用列表推导式,使语句更加简单:

>>>with open('in_file.txt') as file_object:
	   lines3 = [x.rstrip() for x in file_object]
>>>print(lines3)
['>WP_006042265.1', 'MSTAIAQQKIRIRLKAFDRRMLDLSCDKIIETADNTAATAIGPIPLPTKRKIYCVLRSPHVDKDSREHFETRTHRRIIDI', 'YSPSAKTIDALMKLDLPSGVDIEVKL']

接下来,如果我们希望只提取序列名称,不需要序列,那只需要在列表推导式后加上条件

>>>with open('in_file.txt') as file_object:
	   lines4 = [x.rstrip() for x in file_object if x[0] == '>']
>>>print(lines4)
['>WP_006042265.1']

微生物基因组

1,从微生物基因组可以预测出微生物的底物利用模式,这对重建微生物代谢途径有重要价值。对大量培养困难或者不可培养的微生物的基因组分析,可以用来确定其培养条件。例如对耐辐射异常球菌的基因组分析,帮助确定了其在营养受限的辐射环境中保持生长的关键营养要素。
2,DNA微阵列可以确定不同生长条件下基因的表达情况;也用于与参照基因组比较,发现不同菌株或物种间基因存在或缺失。通过用微阵列技术比较了在丰富培养基和基本培养基中的基因表达,获得了微生物在不同生长条件下的基因表达调控数据。
3,比较基因组杂交(comparative genome hybridization,CGH)则用来研究近缘物种间基因组的多样性,比如用于确定近缘物种之间的代谢能力差异。

你可能感兴趣的:(利用python进行数据分析)