Python中文
首页
教程
问答
标签
搜索
登录
注册
如何提高数百个文件中数千行的解析效率
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我写了一个剧本,但速度太慢了。我想知道是否有人能建议如何加速。剧本中我觉得太慢的部分是这样的:</p> <ol> <li><p>我有一个包含1000个人类基因名称的列表(每个基因名称都是一个数字),读入一个名为“ListOfHumanGenes”的列表中;例如,列表的开头如下所示:</p> <p><code>[2314,2395,10672,8683,5075]</code></p></li> <li><p>我有100个这样的文件,扩展名都是“.humanhomolors”:</p> <pre><code>HumanGene OriginalGene Intercept age pval 2314 14248 5.3e-15 0.99 3.5e-33 2395 14297 15.76 -0.05 0.59 10672 14674 7.25 0.19 0.58 8683 108014 21.63 -1.74 0.43 5075 18503 -6.34 1.58 0.19 </code></pre></li> <li><p>脚本这一部分的算法是(用英语,不是代码):</p></li> </ol> <blockquote> <pre><code>for each gene in ListOfHumanGenes: open each of the 100 files labelled ".HumanHomologs" if the gene name is present: NumberOfTrials +=1 if the p-val is <0.05: if the "Age" column < 0: UnderexpressedSuccess +=1 elif "Age" column > 0: OverexpressedSuccess +=1 print each_gene + "\t" + NumberOfTrials + "\t" UnderexpressedSuccess print each_gene + "\t" + NumberOfTrials + "\t" OverexpressedSuccess </code></pre> </blockquote> <p>本节代码为:</p> <pre><code>for each_item in ListOfHumanGenes: OverexpressedSuccess = 0 UnderexpressedSuccess = 0 NumberOfTrials = 0 for each_file in glob.glob("*.HumanHomologs"): open_each_file = open(each_file).readlines()[1:] for line in open_each_file: line = line.strip().split() if each_item == line[0]: NumberOfTrials +=1 #i.e if the gene is in the file, NumberOfTrials +=1. Not every gene is guaranteed to be in every file if line[-1] != "NA": if float(line[-1]) < float(0.05): if float(line[-2]) < float(0): UnderexpressedSuccess +=1 elif float(line[-2]) > float(0): OverexpressedSuccess +=1 underexpr_output_file.write(each_item + "\t" + str(UnderexpressedSuccess) + "\t" + str(NumberOfTrials) + "\t" + str(UnderProbability) +"\n") #Note: the "Underprobabilty" float is obtained earlier in the script overexpr_output_file.write(each_item + "\t" + str(OverexpressedSuccess) + "\t" + str(NumberOfTrials) + "\t" + str(OverProbability) +"\n") #Note: the "Overprobability" float is obtained earlier in the script overexpr_output_file.close() underexpr_output_file.close() </code></pre> <p>这将生成两个输出文件(一个用于over,一个用于under expressed),如下所示:列为GeneName、#Overexpressed/#under expressed、#NumberTrials,然后可以忽略最后一列:</p> <pre><code>2314 8 100 0.100381689982 2395 14 90 0.100381689982 10672 10 90 0.100381689982 8683 8 98 0.100381689982 5075 5 88 0.100381689982 </code></pre> <p>每个“.humanhomolors”文件中都有>;8000行,基因列表约有20000个基因长。所以我理解这很慢,因为对于20000个基因中的每一个,它打开100个文件,在每个文件的8000个基因中找到这个基因。我想知道是否有人可以建议编辑我可以使这个脚本更快/更有效?你知道吗</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>你的算法会把这100个文件打开1000次。立即想到的优化是将文件作为最外层的循环进行迭代,这将确保每个文件只打开一次。然后检查每个基因的存在并记录下你想要的任何其他记录。你知道吗</p> <p>此外,熊猫模块将非常方便地处理这种csv文件。看看<a href="http://pandas.pydata.org/pandas-docs/stable/" rel="nofollow noreferrer">Pandas</a></p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
如何根据与其他行比较的列表筛选序列?
9 回答
如何根据与前一行的差异对行进行分组?
2 回答
如何根据与另一个图像匹配的图像特征来变换图像?
8 回答
如何根据与另一个模型的关系在模板视图中查询另一个Django模型
8 回答
如何根据与已知参考轨迹的距离过滤出位置数据?
3 回答
如何根据与现有值比较的下限和上限创建新的pandas系列
2 回答
如何根据与输入字符串共享的特征从数据集中获取值
3 回答
如何根据与长生不老药的多对多关系排序?
3 回答
如何根据世代显示,x'攻击'和y'防御'
6 回答
如何根据两个CSV文件中的公共信息用Python合并两个CSV文件?
4 回答
如何根据两个CSV文件的相似性比较它们的行?
7 回答
如何根据两个不同列的值在一列中填充NaN
9 回答
如何根据两个不同列的日期获取交叉联接表的唯一记录?
3 回答
如何根据两个不同列表中的相应值创建if语句?
8 回答
如何根据两个不同栏目的分数组成三个不同的班级,有人能指导我吗,请参考我的代码
10 回答
如何根据两个不同的字符串检查变量?9行examp
6 回答
如何根据两个值对词典进行分组?
6 回答
如何根据两个列表获得自定义元组的计数
5 回答
如何根据两个变量的条件打印特定输出
9 回答
如何根据两个变量重新采样以均匀地派生类?
7 回答