Python 文件操作

#文件操作使用内置函数 :

open ( name [, mode [, buffering ] ] )    #打开文件

关于open 模式:

w     以写方式打开,
a     以追加模式打开
r+     以读写模式打开
w+     以读写模式打开
a+     以读写模式打开
rb     以二进制读模式打开
wb     以二进制写模式打开
ab     以二进制追加模式打开
rb+    以二进制读写模式打开
wb+    以二进制读写模式打开
ab+    以二进制读写模式打开

读写文件方法:

import os	  #导入os库

# os.mknod("test.txt")        #创建空文件

# f = open("test.txt",'w')    #直接打开一个文件,如果文件不存在则创建文件model默认为‘r’只读
# f.read([size])              #size为读取的长度,以byte为单位
# f.readline([size])          #读一行,如果定义了size,有可能返回的只是一行的一部分
# f.readlines([size])         
#把文件每一行作为一个list的一个成员,并返回这个list。其实它的内部是通过循环调用readline()
#来实现的。如果提供size参数,size是表示读取内容的总长,也就是说可能只读到文件的一部分。

# f.write(str)                #把str写到文件中,write()并不会在str后加上一个换行符
# f.writelines(seq)           
#把seq的内容全部写到文件中(多行一次性写入)。这个函数也只是忠实地写入,不会在每行后面加上
#任何东西。

# f.close()                   
#关闭文件。python会在一个文件不用后自动关闭文件,不过这一功能没有保证,最好还是养成自己
#关闭的习惯。  如果一个文件在关闭后还对其进行操作会产生ValueError

# f.flush()                   #把缓冲区的内容写入硬盘
# f.tell()                    #返回文件操作标记的当前位置,以文件的开头为原点
# f.next()                    
#返回下一行,并将文件操作标记位移到下一行。把一个file用于for … in file这样的语句时,
#就是调用next()函数来实现遍历的。

# f.seek(offset[,whence])     
#将文件打操作标记移到offset的位置。这个offset一般是相对于文件的开头来计算的,一般为正数。
#但如果提供了whence参数就不一定了,whence可以为0表示从头开始计算,1表示以当前位置为原点计
#算。2表示以文件末尾为原点进行计算。需要注意,如果文件以a或a+的模式打开,每次进行写操作时,
#文件操作标记会自动返回到文件末尾。

# -----------------------语法结构-----------------------------
#常用语法结构为:
with open('gaofei.txt','w+') as fw: #使用with open自动关闭文件
    fw.write()

考试例题-及代码


#------------------------考试例题-及代码---------------------------
"""
(一)随机mtDNA序列(50分)
(1).使用代码随机生成20000个样本的mtDNA序列(mtDNA是由AGCT四个字母随机组成的),生成文件名为dnaData.txt,文件的具体格式如下[20分]:
S00001	  AGCT….CTAG
S00002    TTAG….AGCT
S00003    ATAG….AGAT
S00004    ATAG….ACTT
……………………………………………….
S20000    ATAG….TGAT
评分标准:
①样本编号必须连续,且从S00001到S20000(5分)
②样本的mtDNA序列的长度必须为20(5分)
③每个位置的氨基酸(A、G、C、T)必须随机生成(5分)
④按照格式将数据存入文件(5分)

(2) 编写一个函数,该函数有两个输入,一个为前面产生的dnData.txt样本文件,一个是某一个样本
的编号(假定该样本的编号一定存在于dnData.txt中,例如S00003		ATAGAGTAATAGTGTAAGAT);函数输出
一个文件,文件名为searchResult.txt。 searchResult.txt的格式和dnData.txt的格式基本一致,但是最后附加相似度数据项;  
searchResult.txt样本数据的顺序需要按着和输入样本的相似度降序排序:(输入样本应该出现在第一行)
[30分]。
例:S00001		AGCTACGTACTTATAGCTAG 
    S00002		TTAGACGTAGTTATAGAGCT 
    S00003		ATAGAGTAATAGTGTAAGAT 
两个mtDNA序列的相似度为:两个序列中字母相同的个数。
样本S00002与样本S00001的相似度为11
样本S00003与样本S00002的相似度为8
①正确生成searchResult.txt文件(7分)
②searchResult.txt文件中的第一行应为输入样本(5分)
③searchResult.txt文件中应存在20000条样本(5分)
④searchResult.txt文件中,先后按照降序排列(8分)
⑤求出并输出所有相似度的平均数(5分)
(二)文件操作(30分)
①创建空文件,并命名为success.txt(5分)
②打开文件success.txt,并写入“Diligence is the path to the mountain of knowledge”(5分)
③用两个不同的打开方法读显示success.txt文件中的内容。(10分)
④使用with打开success.txt文件,向此文件继续写入“Hard-working is the boat to the endless sea
 of learning.”。(5分)
⑤使用with打开success.txt文件,读取并输出文件内容到屏幕(5分)
"""
# -----------------------------代   码---------------------------------------
# title1----------------------------------------------------------
import random

#生成每一行的序列
def xulie():
    str = ''
    # mtDNA序列的长度必须为20
    for i in range(20):
        if i == 10:
            #间隔2个空格
            str += '  '
        #每个位置的氨基酸(A、G、C、T)必须随机生成
        str += random.choice('ACGT')
    return str
    
#格式化数据
list_dna = [ 'S%05d'%(j+1) + '    ' + xulie() + '\n'  for j in range(10000)]

# 数据存入文件
with open('dnasamples.txt','w') as f:
    f.writelines(list_dna)


#title2------------------------------------------------
#统计和选择的字符串相同的字符的数量,除去空格的两个
def count(old,new):
    count = 0
    length = len(old)
    for i in range(length):
        if old[i] == new[i]:
            count += 1
    return 20-(count - 2)

def search_diff(file , nums):
    #读取数据
    with open(file,'r') as fr:
        list_all = fr.readlines()
        dict_all = dict([(line[:6],line[10:-1]) for line in list_all])
    #获取数据
    str_old = dict_all[nums]
    #删除要删除的一行数据
    dict_all.pop(nums)
    dict_output = [ (k + '    ' + v + '  区别度为:' , count(str_old,v)) for k,v in dict_all.items()]
    #排序:区别程度升序排列(从小到大)
    dict_output = sorted(dict_output,key = lambda x : x[1],reverse=False)
    print(dict_all) #测试
    print(dict_output) #测试
    dict_outputs = [ line[0] + str(line[1]) + '\n' for line in dict_output]
    print(dict_outputs) #测试
    #difference.txt文件
    with open('difference.txt' , 'w',encoding='utf-8') as fw:
        #ifference.txt文件中的第一行应为输入样本,对应的区别程度为 0
        fw.write(nums + '    ' + str_old + '  区别度为:0\n')
        fw.writelines(dict_outputs)
#

search_diff('dnasamples.txt','S00001')
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值