#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.