我是 Python 新手,遇到了一个在任何地方都找不到答案的问题。
我正在尝试编写代码来根据另一个文件过滤一组文件。这些文件是具有多行和多列的数组。我想要的是从数据文件中删除与某些列的过滤文件中的行匹配的行。
代码是:
paths = ('filepaths.txt')#file that has filepaths to open
filter_file = ('filter.txt')#file of items to filter
filtered = open('filtered.txt','w') #output file
filtering = open(filter_file, 'r').readlines()
for f in filtering:
filt = f.rstrip().split('\t')
files = open(paths).read().splitlines()
for file in files:
try:
lines = open(file,'r').readlines()
for l in lines:
data = l.rstrip().split('\t')
a = [data[0], data[5], data[6], data[10], data[11]] #data columns to match
b= [filt[0], filt[1], filt[2], filt[3], filt[4]] #filter columns to match
for i,j in zip(a,b): #loop through two lists to filter
if i != j:
matches = '\t'.join(data)
print (matches)
filtered.write(matches + '\n')
filtered.close()
代码执行,但没有按我的意愿工作。我得到的是每个文件的最后一行,重复 5 次。
显然,我错过了一些东西。我不确定 zip 是否是正确的功能,或者其他东西会更好。我会很感激任何建议。
编辑:
过滤器的样本输入:
HSPG2 22161380 22161380 G A
PPTC7 110974744 110974744 G C
OR1S2 57971546 57971546 A C
要过滤的文件的示例输入(多余的列被保留):
TKTL1 8277 broad.mit.edu 37 X 153558089 153558089 + 3'UTR SNP G C C
MPP1 4354 broad.mit.edu 37 X 154014502 154014502 + Silent SNP G A A
BRCC3 79184 broad.mit.edu 37 X 154306908 154306908 + Silent SNP A T T
示例输出(多余的列被保留):
BRCC3 79184 broad.mit.edu 37 X 154306908 154306908 + Silent SNP A T T
BRCC3 79184 broad.mit.edu 37 X 154306908 154306908 + Silent SNP A T T
BRCC3 79184 broad.mit.edu 37 X 154306908 154306908 + Silent SNP A T T
BRCC3 79184 broad.mit.edu 37 X 154306908 154306908 + Silent SNP A T T
BRCC3 79184 broad.mit.edu 37 X 154306908 154306908 + Silent SNP A T T