在Python中,读取文件分为三个步骤:
一、打开文件:open
file_handle=open('readme.txt','r')
file_handle
<_io.TextIOWrapper name='readme.txt' mode='r' encoding='cp936'>
文件句柄不是文件,而是对文件的说明。
二、读取文件:有几个方法来读取文件。
- read(n): 从文件中读取n个字节。如果没有参数,它将读取整个文件。
- readline(): 返回文件中只有一行的字符串,包括' \n '作为行结束标记。当它到达文件末尾时,它返回一个空字符串。
- readlines(): 返回一个列表,其中每个元素都是一个字符串,其中包含来自文件的一行。
使用read()来读取seqA.fas
file_handle=open('./samples/seqA.fas','r')
file_handle.read()
'>O00626|HUMAN Small inducible cytokine A22.\nMARLQTALLVVLVLLAVALQATEAGPYGANMEDSVCCRDYVRYRLPLRVVKHFYWTSDSCPRPGVVLLTFRDKEICADPRVPWVKMILNKLSQ\n'
三、关闭文件
- 一旦我们完成了文件,我们使用filehandle.close()关闭它。
- 如果不关闭文件,当程序执行完成后python将会关闭它。
- 不及时关闭文件会造成资源浪费。
- 使用with可以确保文件被关闭。
不使用with
file_handle=open('readme.txt','r')
file_handle.read()
file_handle.close()
使用with
with open('readme.txt','r') as file_handle:
file_handle.read()
四、实例
读取FASTA文件
with open('./samples/seqA.fas','r') as fh:
print(fh.read())
>O00626|HUMAN Small inducible cytokine A22.
MARLQTALLVVLVLLAVALQATEAGPYGANMEDSVCCRDYVRYRLPLRVVKHFYWTSDSCPRPGVVLLTFRDKEICADPRVPWVKMILNKLSQ
- 将FASTA文件的名字和序列分开
with open('./samples/seqA.fas','r') as fh:
my_file=fh.read()
name=my_file.split('\n')[0][1:] #去掉>
sequece=''.join(my_file.split('\n')[1:])
print('The name is : {0}'.format(name))
print('The sequece is : {0}'.format(sequece))
The name is : O00626|HUMAN Small inducible cytokine A22.
The sequece is : MARLQTALLVVLVLLAVALQATEAGPYGANMEDSVCCRDYVRYRLPLRVVKHFYWTSDSCPRPGVVLLTFRDKEICADPRVPWVKMILNKLSQ
- 使用for进行遍历:
sequce=''
with open('./samples/seqA.fas','r') as fh:
name=fh.readline()[1:-1]
for line in fh:
sequce+=line.replace('\n','')
print('The name is : {0}'.format(name))
print('The sequece is : {0}'.format(sequce))
The name is : O00626|HUMAN Small inducible cytokine A22.
The sequece is : MARLQTALLVVLVLLAVALQATEAGPYGANMEDSVCCRDYVRYRLPLRVVKHFYWTSDSCPRPGVVLLTFRDKEICADPRVPWVKMILNKLSQ
- 计算净电荷
sequence=''
charge=-0.002
aa_charge = {'C':-.045, 'D':-.999, 'E':-.998, 'H':.091,
'K':1, 'R':1, 'Y':-.001}
with open('./samples/prot.fas') as fh:
#print(fh.read())
fh.readline()
for line in fh:
#print(line[:-1])
sequence+=line[:-1].upper() #去掉\n
for aa in sequence:
charge+=aa_charge.get(aa,0)
print(charge)
3.046999999999999
网友评论