<p>作为较长代码的一部分,我在尝试执行以下操作时遇到了障碍:
我有一个3列的库:[ClusterID,Human,Mouse]</p>
<pre><code>ClusterID Human Mouse
50 LongAUGORFlinc|3P|XLOC_076196|TCONS_00295623:0.269513|182AA|167AA|$|$linc|3P|XLOC_037932|TCONS_00153577:0.957089|101AA|56AA|$|$linc|3P|XLOC_048756|TCONS_00195334:1.35817|128AA|73AA| linc|3P|XLOC_066319|TCONS_00127223:1.0925|85AA|41AA|$|$LongAUGORFEnsASCoding|3P|XLOC_104581|TCONS_00206607|Nr2f2:0.354897|174AA|162AA||RNACodeAS|HSS_32160_5.3E-14$HSS_32161_6.4E-9$HSS_32163_3.9E-11$HSS_32164_6.5E-6$HSS_32165_4.7E-6$HSS_32166_1.7E-7$HSS_32168_8.1E-6$HSS_32169_3.2E-8$|$LongAUGORFEnsASCoding|3P|XLOC_113060|TCONS_00223512|Sugp1:1.20904|141AA|141AA||RNACodeAS|NearGap
81 EnsASCoding|3P|XLOC_034831|TCONS_00142998:0.399276|92AA|83AA|$|$LongAUGORFlinc|3P|XLOC_033946|TCONS_00137705:0.986858|221AA|196AA|$|$EnsASCoding|3P|XLOC_000485|TCONS_00003136:0.4139|122AA|78AA||RNACodeAS|HSS_0_4.2E-9$HSS_1_4.5E-5$|$EnsASCoding|3P|XLOC_034831|TCONS_00142998:0.399276|92AA|83AA| linc|3P|XLOC_104529|TCONS_00206387:0.585795|114AA|82AA|$|$EnsASCoding|3P|XLOC_082328|TCONS_00160013:0.608952|88AA|59AA||RNACodeAS|HSS_18226_2.7E-14$HSS_18230_7.0E-5$HSS_18231_3.8E-13$HSS_18232_1.4E-5$|$LongAUGORFEnsASCoding|3P|XLOC_097111|TCONS_00191837|Zfp422:0.683284|252AA|192AA||RNACodeAS|HSS_28462_1.1E-12$HSS_28463_1.0E-16
279 linc|3P|XLOC_067039|TCONS_00267121:3.78124|173AA|31AA|$|$linc|3P|XLOC_067039|TCONS_00267116:3.53265|56AA|54AA|$|$linc|3P|XLOC_067039|TCONS_00267119:0.429515|42AA|31AA|$|$inc|3P|XLOC_067039|TCONS_00267121:3.78124|173AA|31AA| LongAUGORFlinc|3P|XLOC_097853|TCONS_00194306|AB041803:0.416568|171AA|166AA|$|$LongAUGORFlinc|3P|XLOC_097853|TCONS_00194302|AB041803:0.682355|197AA|166AA|$|$LongAUGORFlinc|3P|XLOC_097853|TCONS_00194307|AB041803:0.181415|171AA|166AA|
</code></pre>
<p>第2列和第3列的每个元素都被“$|$”分割。但是,在$和$之间可能有冗余部分。例如,在第2行的人列中,以下表达式重复两次:</p>
<pre><code>EnsASCoding|3P|XLOC_034831|TCONS_00142998:0.399276|92AA|83AA|
</code></pre>
<p>重复两次。你知道吗</p>
<p>我有一个2列的查询列表:[GeneID,XLOC\u ID]:</p>
<pre><code>GeneID XLOC_ID
A LongAUGORFlinc|3P|XLOC_097853|TCONS_00194307|AB041803:0.181415|171AA|166AA|
B linc|3P|XLOC_105908|TCONS_00210845:3.79119|120AA|90AA|
C linc|3P|XLOC_082473|TCONS_00160364:0.170433|40AA|22AA|
D LongAUGORFEnsASCoding|3P|XLOC_084529|TCONS_00166880:0.478235|183AA|171AA|
E linc|3P|XLOC_043879|TCONS_00084901:2.01255|106AA|97AA|
</code></pre>
<p>查询列表的每个行元素都是唯一的。你知道吗</p>
<p>我想查看查询列表的第二列,查看该值是否与库的“Mouse”列中任何以“$|$”分隔的元素匹配。如果是,则将库的“Human”列拆分为“$|$”,然后输出每个查询id和$|$中的每个元素。你知道吗</p>
<p>例如,“GeneID”A的XLOC|u ID是:LongAUGORFlinc | 3P | XLOC|u 097853 | TCONS | u 00194307 | AB041803:0.181415 | 171AA | 166AA |</p>
<p>这是库的[row 3,Mouse column]的一部分。因此,我需要将第3行的Human列按$|$拆分,以便在单独的行中输出每个列,例如结果如下:</p>
<pre>
GeneID XLOC_ID Human_ID
A LongAUGORFlinc|3P|XLOC_097853|TCONS_00194307|AB041803:0.181415|171AA|166AA| linc|3P|XLOC_067039|TCONS_00267121:3.78124|173AA|31AA|
A LongAUGORFlinc|3P|XLOC_097853|TCONS_00194307|AB041803:0.181415|171AA|166AA| linc|3P|XLOC_067039|TCONS_00267116:3.53265|56AA|54AA|
A LongAUGORFlinc|3P|XLOC_097853|TCONS_00194307|AB041803:0.181415|171AA|166AA| linc|3P|XLOC_067039|TCONS_00267119:0.429515|42AA|31AA|
</pre>
<p>并对查询列表的其余部分执行相同的操作,所有内容都应输出在同一个文件中。你知道吗</p>
<p>这是我的代码(我不认为这是最好的记忆方面,但它的工作):</p>
<pre><code>library=pd.read_table("Library.txt")
mouse_lib=pd.Series(library['Mouse']).str.split("$|$")
dict1={}
human_lib=pd.Series(library['Human'].str.split("$|$"))
for index, value in human_lib.iteritems():
k,v=index, human_lib[index]
dict1[k]=v
out_match=open("Matching.xls", "w")
query=pd.read_table("Query.txt")
for i in range(0, len(query.index)):
xloc=query.ix[i,"XLOC_ID"]
for index, value in mouse_lib.iteritems():
#print mouse_lib[index]
if xloc in mouse_lib[index]:
for value in dict1[index]:
newline= query.ix[i,"GeneID-gtf"], xloc, str(value)
out_match.write('\t'.join(newline)+'\n')
</code></pre>
<p>不幸的是,如果使用“$|$”作为分隔符,则代码不起作用。如果我用任何其他字符串(如“ZZZYYY”)替换所有输入文件中的所有“$|$”,那么脚本就可以工作了。我不明白为什么会这样,我试图搜索“$|$”是否是预定义的python代码,但没有找到任何类似的内容。此外,我不确定我上面的代码在内存和功能方面是否是最好的。如有任何建议,将不胜感激。你知道吗</p>