Извлечение строк, которые совпадают с другим столбцом другого файла

#python

#python

Вопрос:

У меня есть 2 файла, разделенных табуляцией с большим количеством столбцов (формат.tsv). Я создал скрипт на Python, который выдает вам полные строки одного файла, если определенное значение одного столбца отличается от другого файла:

 File A:
ID   Name1   Name2   Name3   NameN

File B:
ID   Name1   Name2   Name3   NameN
  
 normal=open('File1.tsv','r')
tumor=open('File2.tsv','r')

a=normal.readlines()
b=tumor.readlines()

A=[]
for ln in a:
    A.append(ln.split('t')[9])
B=[]
for ln in b:
    B.append(ln.split('t')[9])

normal.close()
tumor.close()

c=[]

for k, i in enumerate(B):
    if i not in A:
        c.append(b[k])      

co=open('c.txt','w')
for ln in c:
    co.write(ln)
  

Теперь то, что я пытаюсь сделать, — это oposite. Я имею в виду, если я нахожу совпадение, на выходе должны быть полные строки file2.

Я думаю, что изменение только последнего условия кода исправит, но это не так.

Есть идеи? Спасибо!

Комментарии:

1. Чтобы быть уверенным, в вашем первом случае вы хотите сравнить значение в строке tumor с той же строкой в normal? Или из вашего for k, i in enumerate(B): похоже, что вы просто проверяете, не существует ли эта строка опухоли где-либо в обычном файле. Пожалуйста, уточните. Также, пожалуйста, подтвердите, что c.append(b[k]) это опечатка. Это должно быть c.append(B[k])

2. @perennial_noob c.append(b[k]) не является опечаткой, потому что b содержит полные строки, в то время как B содержит только 9-й столбец каждой строки, и OP хочет вывести полные строки.

3. @perennial_noob, в первом случае мой скрипт работает, потому что я получаю уникальные строки tumor, но операция, предложенная blhsing, не работает

4. Итак, я возвращаюсь к своему другому вопросу. Вы хотите, чтобы строка была добавлена, если соответствующие столбцы строки в normal и tumor равны / совпадают? Если это так, вам нужно изменить его на проверку равенства вместо if i in A:

5. Это то, что я хочу @perennial_noob, но с этим условием не работает for k, i in enumerate(B): if i in A: c.append(b[k])

Ответ №1:

Если вы намерены сделать наоборот, вывести только строки во втором файле, где значения 10-го столбца одинаковы в обоих файлах, затем измените:

 if i not in A:
  

Для:

 if i in A:
  

должно получиться.

Комментарии:

1. Но, по-видимому, это не работает, согласно OP. Я чувствую, что в этом вопросе не хватает ясности.

2. OP не показал нам, как он изменяет последнее условие, поэтому весьма вероятно, что OP изменил его неверным образом.

3. Именно это я и сделал. Но результат, который я получаю, странный, потому что у меня есть некоторые совпадения и некоторые другие строки, уникальные для B.