我有两个文本文件,一个包含标识符列表,另一个包含更多标识符列表,还有一些我想要的信息。我要做的是比较文件1和2中的标识符,如果它们匹配,则将文件2中的行写入一个新文件,即文件3。
下面是我所拥有的(这有点奇怪,因为我进入了列表,而且在编程方面还没有得到那么多):
def identify(MOPED_Prot, Swiss_Prot, MOPED_to_Swiss):
Swiss = open(Swiss_Prot, 'r')
M = open(M_Prot, 'r')
output = open(M_to_Swiss, 'wt')
Swissids = []
ids = []
for line in M.readlines():
ids.append(line[:5])
for line in Swiss.readlines():
Swissids.append(line)
while set(ids)& set(Swissids):
output.write(#line? Not sure what goes here + "\n")我确实得到了这样的代码,可以用类似于此的代码为每个交叉点编写一行从“瑞士”到新文件的代码,但它只重复了一行。老实说,最后才是我所困惑的。
编辑:按照要求,以下是文件的样子
档案1:
B4E035
P23946
O00376
D6RGF3
B2RDK6
Q12999
Q8TDD2
B2RDC9
C9JL66
Q9NZQ9 档案2:
P31946 1433B_HUMAN YWHAB
P62258 1433E_HUMAN YWHAE
Q04917 1433F_HUMAN YWHAH YWHA1
P61981 1433G_HUMAN YWHAG
P31947 1433S_HUMAN SFN HME1文件3应该输出文件2中的行,如果第一列中有任何标识符匹配(它们都是6个字符的长度)
发布于 2013-08-02 16:48:50
假设file1每一行包含一个标识符,也许您可以使用以下内容:
with open (file1, 'r') as f: ids = [line.strip () for line in f]
with open (file2, 'r') as f:
with open (file3, 'w') as g:
for line in f:
if any (id in line for id in ids): g.write (line)Nota :我没有安装python2.7 (直到现在我还读到您需要python2.7)。也许您需要进行一些调整,以便将此代码移植到py2。
编辑:考虑到您的示例数据,您可以尝试如下:
with open (file1, 'r') as f: ids = [line.strip () for line in f]
with open (file2, 'r') as f:
with open (file3, 'w') as g:
for line in f:
if any (line.startswith (id) for id in ids): g.write (line)发布于 2013-08-02 17:04:24
我在这里写了一些能帮你的东西.我把三个文件放进一个文件夹
file_a.txt (每一行1、2、3、4、5中的内容)
file_b.txt (每一行4、5、6、7、8中的内容)
final_file.txt
这是我的剧本:
# -*- coding: utf-8 -*-
from collections import Counter
file_a = open('file_a.txt', 'r')
file_b = open('file_b.txt', 'r')
final_file = open('final_file.txt', 'w')
ids = []
for line in file_a.readlines():
ids.append(line)
print ids
c = Counter(ids)
for line in file_b.readlines():
print line;
print 'count' + str(c[line])
if c[line] > 0:
final_file.write(line);
file_b.close();
final_file.close();
file_a.close();https://stackoverflow.com/questions/18022106
复制相似问题