- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我编写了一个Python脚本,该脚本从CIF文件生成字典。我用这样的文件[1qpe,使用4105行->时间:383ms(毫秒)]或使用了这个文件(1d66,使用3274行->时间:225ms)进行了测试,但是当我尝试使用该文件时(4tvx,具有170925行),花费很长时间,以至于我决心阻止该过程。我当时想拆分CIF文件,从中推断出以ATOM和HETATM开头的行:
实际上,从每个原始CIF文件开始,目的是首先获取4个文件:
包含我称为header的文件=以ATOM和HETATM开头的行循环上方的所有行
一个仅包含循环的26行的文件
包含以ATOM和HETATM开头的所有行的文件
包含所有其余行的文件,我称之为页脚
到这里我解决了,对于1d66用34毫秒,对于1qpe用43毫秒,对于4tvx用1.923s。
现在,获得了第三个文件(所有过程的目标,因为是字典的输入),我想从中推断出具有相同第七列的所有行,并将它们写到一个专用文件中,并用将第7列作为文件名,对第7列的所有值重复此操作。
这是我的代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys, os
import os.path
scriptdir = os.path.dirname(os.path.abspath(__file__))
cif_dir = os.path.join(scriptdir, 'cif/')
def get_line_number(phrase, file_name):
with open(file_name) as f:
for i, line in enumerate(f, 1):
if phrase in line:
return i
def my_header_splitfile(infilepath, chunksize):
fname, ext = infilepath.rsplit('.',1)
with open(infilepath) as infile:
outfilepath = "{}_header.{}".format(fname, ext)
with open(outfilepath, 'w') as outfile:
for line in (infile.readline() for _ in range(0,(chunksize-2))):
outfile.write(line) # END
temp_lines = open(infilepath).readlines()
temp_outfilepath = "{}_temp.{}".format(fname, ext)
atom_hetatm_header_outfilepath = "{}_atom_hetatm_header.{}".format(fname, ext)
with open(atom_hetatm_header_outfilepath, 'w') as outfile:
outfile.writelines(temp_lines[(chunksize-2):(chunksize+25)])
with open(temp_outfilepath, 'w') as outfile:
outfile.writelines(temp_lines[(chunksize+25):-1]) # END
footer_lines = open(temp_outfilepath).readlines()
footer_outfilepath = "{}_footer.{}".format(fname, ext)
with open(footer_outfilepath, 'w') as outfile:
for line in footer_lines:
if not (line.startswith('ATOM') or line.startswith('HETATM')):
outfile.writelines(line) # END
temp_atom_hetatm_lines = open(temp_outfilepath).readlines()
temp_atom_hetatm_outfilepath = "{}_atom_hetatm.{}".format(fname, ext)
with open(temp_atom_hetatm_outfilepath, 'w') as outfile:
for line in temp_atom_hetatm_lines:
if (line.startswith('ATOM') or line.startswith('HETATM')):
outfile.writelines(line) # END
os.remove(temp_outfilepath) # FINISH
"""BEGIN TO SPLIT THE 'ATOM'"""
"""
with open(temp_atom_hetatm_outfilepath,'r') as infile:
lines = infile.readlines()
rows_list = list()
chains_list = list()
for line in lines:
col = line.split(None)
rows_list.append(col)
#print line
#if col[0] == "HETATM":
# print "HETATM record"
if col[0] == "ATOM":
#print col[0]
# FILTER FOR ONLY PROTEINS AND NUCLEIC ACIDS
if (col[3] == "N" or col[3] == "N1"):
chains_list.append(col[6])
chains_list_cleaned = list(set(chains_list))
for chain in chains_list_cleaned:
if col[6] == chain:
atom_chain_outfilepath = "{}_atom_chain_{}.{}".format(fname, chain, ext)
with open(atom_chain_outfilepath, 'w') as outfile:
#outfile.writelines("Hello")
outfile.writelines(line) # END
"""
cif_code = '1d66'.upper() # CHANGE HERE THE PID CODE. i.e. 1D66, 1QPE, 4TVX
filename = '%s%s.cif' % (cif_dir,cif_code.upper())
begin_atom = get_line_number("_atom_site.group_PDB", filename)
#print begin_atom
my_header_splitfile(filename, begin_atom)
""" with open(temp_atom_hetatm_outfilepath,'r') as infile:
lines = infile.readlines()
rows_list = list()
chains_list = list()
for line in lines:
col = line.split(None)
rows_list.append(col)
#print line
#if col[0] == "HETATM":
# print "HETATM record"
if col[0] == "ATOM":
#print col[0]
# LIMITO ALLE SOLE PROTEINE E ACIDI NUCLEICI
if (col[3] == "N" or col[3] == "N1"):
chains_list.append(col[6])
chains_list_cleaned = list(set(chains_list))
for chain in chains_list_cleaned:
if col[6] == chain:
atom_chain_outfilepath = "{}_atom_chain_{}.{}".format(fname, chain, ext)
with open(atom_chain_outfilepath, 'w') as outfile:
#outfile.writelines("Hello")
outfile.writelines(line) # END
"""
ATOM 378 C C8 . DG A 1 19 ? 34.329 11.346 27.800 1.00 29.46 ? ? ? ? ? ? 19 DG D C8 1
ATOM 379 N N7 . DG A 1 19 ? 34.046 11.420 26.537 1.00 31.63 ? ? ? ? ? ? 19 DG D N7 1
ATOM 380 C C5 . DG A 1 19 ? 32.698 11.672 26.542 1.00 26.85 ? ? ? ? ? ? 19 DG D C5 1
ATOM 381 C C6 . DG A 1 19 ? 31.860 11.863 25.447 1.00 26.53 ? ? ? ? ? ? 19 DG D C6 1
ATOM 382 O O6 . DG A 1 19 ? 32.175 11.864 24.251 1.00 32.03 ? ? ? ? ? ? 19 DG D O6 1
ATOM 383 N N1 . DG A 1 19 ? 30.569 12.079 25.868 1.00 23.18 ? ? ? ? ? ? 19 DG D N1 1
ATOM 384 C C2 . DG A 1 19 ? 30.136 12.115 27.159 1.00 23.53 ? ? ? ? ? ? 19 DG D C2 1
ATOM 385 N N2 . DG A 1 19 ? 28.819 12.261 27.325 1.00 19.29 ? ? ? ? ? ? 19 DG D N2 1
ATOM 386 N N3 . DG A 1 19 ? 30.949 11.949 28.200 1.00 26.27 ? ? ? ? ? ? 19 DG D N3 1
ATOM 387 C C4 . DG A 1 19 ? 32.213 11.729 27.819 1.00 25.75 ? ? ? ? ? ? 19 DG D C4 1
ATOM 388 O "O5'" . DC B 2 1 ? 20.466 11.694 21.639 1.00 40.14 ? ? ? ? ? ? 20 DC E "O5'" 1
ATOM 389 C "C5'" . DC B 2 1 ? 21.891 11.609 21.791 1.00 29.52 ? ? ? ? ? ? 20 DC E "C5'" 1
ATOM 390 C "C4'" . DC B 2 1 ? 22.246 11.659 23.274 1.00 28.85 ? ? ? ? ? ? 20 DC E "C4'" 1
ATOM 391 O "O4'" . DC B 2 1 ? 23.643 11.328 23.562 1.00 27.78 ? ? ? ? ? ? 20 DC E "O4'" 1
ATOM 392 C "C3'" . DC B 2 1 ? 22.093 13.078 23.713 1.00 26.83 ? ? ? ? ? ? 20 DC E "C3'" 1
ATOM 393 O "O3'" . DC B 2 1 ? 21.761 13.021 25.064 1.00 26.10 ? ? ? ? ? ? 20 DC E "O3'" 1
ATOM 394 C "C2'" . DC B 2 1 ? 23.541 13.575 23.586 1.00 27.66 ? ? ? ? ? ? 20 DC E "C2'" 1
ATOM 395 C "C1'" . DC B 2 1 ? 24.295 12.435 24.176 1.00 21.82 ? ? ? ? ? ? 20 DC E "C1'" 1
ATOM 378 C C8 . DG A 1 19 ? 34.329 11.346 27.800 1.00 29.46 ? ? ? ? ? ? 19 DG D C8 1
ATOM 379 N N7 . DG A 1 19 ? 34.046 11.420 26.537 1.00 31.63 ? ? ? ? ? ? 19 DG D N7 1
ATOM 380 C C5 . DG A 1 19 ? 32.698 11.672 26.542 1.00 26.85 ? ? ? ? ? ? 19 DG D C5 1
ATOM 381 C C6 . DG A 1 19 ? 31.860 11.863 25.447 1.00 26.53 ? ? ? ? ? ? 19 DG D C6 1
ATOM 382 O O6 . DG A 1 19 ? 32.175 11.864 24.251 1.00 32.03 ? ? ? ? ? ? 19 DG D O6 1
ATOM 383 N N1 . DG A 1 19 ? 30.569 12.079 25.868 1.00 23.18 ? ? ? ? ? ? 19 DG D N1 1
ATOM 384 C C2 . DG A 1 19 ? 30.136 12.115 27.159 1.00 23.53 ? ? ? ? ? ? 19 DG D C2 1
ATOM 385 N N2 . DG A 1 19 ? 28.819 12.261 27.325 1.00 19.29 ? ? ? ? ? ? 19 DG D N2 1
ATOM 386 N N3 . DG A 1 19 ? 30.949 11.949 28.200 1.00 26.27 ? ? ? ? ? ? 19 DG D N3 1
ATOM 387 C C4 . DG A 1 19 ? 32.213 11.729 27.819 1.00 25.75 ? ? ? ? ? ? 19 DG D C4 1
ATOM 388 O "O5'" . DC B 2 1 ? 20.466 11.694 21.639 1.00 40.14 ? ? ? ? ? ? 20 DC E "O5'" 1
ATOM 389 C "C5'" . DC B 2 1 ? 21.891 11.609 21.791 1.00 29.52 ? ? ? ? ? ? 20 DC E "C5'" 1
ATOM 390 C "C4'" . DC B 2 1 ? 22.246 11.659 23.274 1.00 28.85 ? ? ? ? ? ? 20 DC E "C4'" 1
ATOM 391 O "O4'" . DC B 2 1 ? 23.643 11.328 23.562 1.00 27.78 ? ? ? ? ? ? 20 DC E "O4'" 1
ATOM 392 C "C3'" . DC B 2 1 ? 22.093 13.078 23.713 1.00 26.83 ? ? ? ? ? ? 20 DC E "C3'" 1
ATOM 393 O "O3'" . DC B 2 1 ? 21.761 13.021 25.064 1.00 26.10 ? ? ? ? ? ? 20 DC E "O3'" 1
ATOM 394 C "C2'" . DC B 2 1 ? 23.541 13.575 23.586 1.00 27.66 ? ? ? ? ? ? 20 DC E "C2'" 1
ATOM 395 C "C1'" . DC B 2 1 ? 24.295 12.435 24.176 1.00 21.82 ? ? ? ? ? ? 20 DC E "C1'" 1
H = header
L = loop for ATOM and HETATM rows
A = chain A (= column 7) in ATOM
B = chain B (= column 7) in ATOM
F = footer
H
L
A+B
F
if not (line.startswith('ATOM') or line.startswith('HETATM'))
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys, os
import os.path
scriptdir = os.path.dirname(os.path.abspath(__file__))
cif_dir = os.path.join(scriptdir, 'cif/')
def get_line_number(phrase, file_name):
with open(file_name) as f:
for i, line in enumerate(f, 1):
if phrase in line:
return i
def my_header_splitfile(infilepath, chunksize):
fname, ext = infilepath.rsplit('.',1)
with open(infilepath) as infile:
outfilepath = "{}_header.{}".format(fname, ext)
with open(outfilepath, 'w') as outfile:
for line in (infile.readline() for _ in range(0,(chunksize-2))):
outfile.write(line) # END
temp_lines = open(infilepath).readlines()
temp_outfilepath = "{}_temp.{}".format(fname, ext)
atom_hetatm_header_outfilepath = "{}_atom_hetatm_header.{}".format(fname, ext)
with open(temp_outfilepath, 'w') as outfile:
outfile.writelines(temp_lines[(chunksize+25):-1]) # END
with open(atom_hetatm_header_outfilepath, 'w') as outfile:
outfile.writelines(temp_lines[(chunksize-2):(chunksize+25)])
footer_lines = open(temp_outfilepath).readlines()
footer_outfilepath = "{}_footer.{}".format(fname, ext)
with open(footer_outfilepath, 'w') as outfile:
for line in footer_lines:
if not (line.startswith('ATOM') or line.startswith('HETATM')):
outfile.writelines(line) # END
temp_atom_hetatm_lines = open(temp_outfilepath).readlines()
temp_atom_hetatm_outfilepath = "{}_atom_hetatm.{}".format(fname, ext)
with open(temp_atom_hetatm_outfilepath, 'w') as outfile:
for line in temp_atom_hetatm_lines:
if (line.startswith('ATOM') or line.startswith('HETATM')):
outfile.writelines(line) # END
"""NEW ENTRY"""
with open(temp_atom_hetatm_outfilepath) as infile:
for line in infile:
if line.startswith("ATOM"):
atom_chain_outfilepath = "{}_atom_chain_{}.{}".format(fname, line.split()[6], ext)
with open(atom_chain_outfilepath, "a") as outfile:
outfile.write(line)
elif line.startswith("HETATM"):
atom_chain_outfilepath = "{}_hetatm_chain_{}.{}".format(fname, line.split()[6], ext)
with open(atom_chain_outfilepath, "a") as outfile:
outfile.write(line)
os.remove(temp_outfilepath) # REMOVE "temp_outfilepath"
os.remove(temp_atom_hetatm_outfilepath) # REMOVE "temp_atom_hetatm_outfilepath" - FINISH
cif_code = '1d66'.upper() # CHANGE HERE THE PID CODE. i.e. 1D66, 1QPE, 4TVX
filename = '%s%s.cif' % (cif_dir,cif_code.upper())
begin_atom = get_line_number("_atom_site.group_PDB", filename)
#print begin_atom
my_header_splitfile(filename, begin_atom)
最佳答案
很难在这里说出您的要求,对此感到抱歉。提供适合您的问题主体的样本输入和输出将大有帮助。
听起来您想根据文件第六列中的值拆分文件。
我会做类似的事情:
def meets_criteria(line):
return line.startswith("ATOM") or line.startswith("HETATM")
with open(large_file) as f:
for line in f:
if meets_criteria(line):
with open(line.split()[6], "a") as of:
of.write(line)
.readlines
方法,请注意,这会将所有数据读取到内存中,没有理由这样做,这可能是脚本挂在大输入上的原因。
关于python - 如何将文件中具有相同值的所有行保存到文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28552413/
是 if(a == 0 && b == 0 && c == 0) { return; } 一样 if(a == 0) { return; } if(b == 0) { return; } if(c =
我想做这样的事情: Class A Class B extends A Class C extends A B b = new B(); C c = new C(); b->setField("foo
我对 Mysql 世界很天真......:)我试图使用连接从表中查询, 我遇到结果集问题...表结构如下 下面... VIDEO_XXXXX | Field | Type
我最近问过关于从另一个类获取类的唯一实例的问题。 ( How to get specific instance of class from another class in Java? ) 所以,我正
假设我们有两种类型 using t1 = int*; using t2 = int*; 我知道 std::is_same::value会给我们true .什么是,或者是否有模板工具可以实现以下目标?
对于我的一个应用程序,我假设比较 2 个字符串的第一个字符比比较整个字符串是否相等要快。例如,如果我知道只有 2 个可能的字符串(在一组 n 字符串中)可以以相同的字母开头(比如说 'q'),如果是这
我想在我的NXP LPC11U37H主板(ARM Cortex-M0)上分析一些算法,因为我想知道执行特定算法需要多少个时钟周期。 我编写了这些简单的宏来进行一些分析: #define START_C
我在 Excel 中创建了一个宏,它将在 Excel 中复制一个表格,并将行除以我确定的特定数字(默认 = 500 行),并为宏创建的每个部门打开不同的工作表。 使用的代码是这样的: Sub Copy
我想根据第一个字典对第二个字典的值求和。如果我有字典 A 和 B。 A = {"Mark": ["a", "b", "c", "d"], "June": ["e", "a"], "John": ["a
当我这样做时 system()在 Perl 中调用,我通常根据 perldocs 检查返回码.嗯,我是这么想的。大部分时间 $rc!=0对我来说已经足够了。最近我在这里帮助了两个遇到问题的人syste
在我的进度条上,我试图让它检测 div 加载速度。 如果 div 加载速度很快,我想要实现的目标将很快达到 100%。但进度条的加载速度应该与 div 的加载速度一样快。 问题:如何让我的进度条加载
当我获得与本地时间相同的时间戳时,firebase 生成的服务器时间戳是否会自动转换为本地时间,或者我错过了什么? _firestore.collection("9213903123").docume
根据the original OWL definition of OWL DL ,我们不能为类和个体赋予相同的名称(这是 OWL DL 和 OWL Full 之间的明显区别)。 "Punning" i
我有两个输入复选框: 尝试使用 jQuery 来允许两个输入的行为相同。如果选中第一个复选框,则选中第二个复选框。如果未检查第 1 个,则不会检查第 2 个。反之亦然。 我有代码: $('inpu
可以从不同系统编译两个相同的java文件,但它们都有相同的内容操作系统(Windows 7),会生成不同的.class文件(大小)? 最佳答案 是的,您可以检查是否有不同版本的JDK(Java Dev
我正在清理另一个人的正则表达式,他们目前所有的都以结尾 .*$ 那么下面的不是完全一样吗? .* 最佳答案 .*将尽可能匹配,但默认情况下为 .不匹配换行符。如果您要匹配的文本有换行符并且您处于 MU
我使用 Pick ,但是如何编写可以选择多个字段的通用PickMulti呢? interface MyInterface { a: number, b: number, c: number
我有一个 SQL 数据库服务器和 2 个具有相同结构和数据的数据库。我在 2 个数据库中运行相同的 sql 查询,其中一个需要更长的时间,而另一个在不到 50% 的时间内完成。他们都有不同的执行计划。
我需要你的帮助,我有一个包含两列的表,一个 id 和 numpos,我希望 id 和 numops 具有相同的结果。 例子: $cnx = mysql_connect( "localhost", "r
如何将相同的列(在本例中按“级别”排序)放在一起?我正在做一个高分,我从我的数据库中按级别列出它们。如果他们处于同一级别,我希望他们具有相同的 ID。 但是我不想在别人身上显示ID。只有第一个。这是一
我是一名优秀的程序员,十分优秀!