как я могу создать цикл if в python, чтобы сказать «если что-то (в данном случае 1/1) существует в одном из моих столбцов (в моем случае 10)?»

#python #if-statement

#python #if-statement

Вопрос:

У меня есть такой файл:

 Chr10   31      .       T       C       35.1    .       DP=7;AF1=1;CI95=1,1;DP4=0,0,7,0;MQ=23;FQ=-48    GT:PL:GQ        1/1:68,21,0:39**
Chr10   445     .       G       T       34      .       DP=23;AF1=0.5;CI95=0.5,0.5;DP4=7,5,6,3;MQ=19;FQ=12.3;PV4=1,6.2e-08,1,0.27       GT:PL:GQ        0/1:64,0,39:42
Chr10   447     .       A       C       93      .       DP=26;AF1=1;CI95=1,1;DP4=0,0,13,8;MQ=19;FQ=-90  GT:PL:GQ        1/1:126,63,0:99
Chr10   449     .       G       C       5.46    .       DP=28;AF1=0.4999;CI95=0.5,0.5;DP4=9,4,6,4;MQ=23;FQ=7.8;PV4=0.69,4.3e-08,0.037,1 GT:PL:GQ        0/1:34,0,130:34
Chr10   481     .       C       T       67      .       DP=55;AF1=0.5;CI95=0.5,0.5;DP4=17,22,10,5;MQ=25;FQ=70;PV4=0.22,1.5e-07,1,1      GT:PL:GQ        0/1:97,0,152:99
  

и я хотел бы создать цикл, который находит все строки, которые есть 1/1 в их 10-м столбце.

Это сценарий, который я написал:

 pilup= open ("libary_ts.sorted.pilup", "rb ")
with open ("select.txt", "wb ") as ch:
  for data in ch:
    e=data.split()
    if e[9] == "1/1":
  

но я знаю, что это неправильно, поскольку if e[9] == означает, что столбец 10 имеет точное значение 1/1, и, как вы можете видеть в примерах данных, которые я помещаю, у меня всегда есть что-то вроде этого:

 1/1:213,60,0:99
  

или

 0/1:43,0,118:46
  

Я просто хотел знать, что я должен использовать, чтобы заставить этот оператор if работать должным образом? Есть ли какой-либо символ, который говорит contain ? Я нигде не мог его найти! Заранее спасибо!

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

1. Чтобы отформатировать код (или необработанные входные файлы) в stackoverflow, выберите его и нажмите Ctrl K .

Ответ №1:

Если оно может появиться в любом месте столбца:

 if "1/1" in e[9]:
  ...
  

Если оно должно отображаться в начале столбца, как в вашем примере:

 if e[9].startswith("1/1"):
  ...
  

В качестве альтернативы, если столбец всегда содержит значения, разделенные двоеточием:

 if e[9].split(':')[0] == "1/1":
  ...
  

Последний является самым строгим из трех и будет моим личным предпочтением.

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

1. Спасибо за ваш действительно полный ответ 🙂

Ответ №2:

Прежде всего, open ("select.txt", "wb ") будет удалено содержимое файла. Я предполагаю, что вы повторяете pilup .

Вы можете использовать in оператор, чтобы проверить 1/1 , встречается ли где-нибудь в десятом элементе:

 if "1/1" in e[9]:
  

В качестве альтернативы, используйте startswith , чтобы проверить, начинается ли десятый элемент, ну, с "1/1" :

 if e[9].startswith("1/1"):
  

Ответ №3:

If 1/1 всегда будет в начале этого столбца, вы можете использовать метод startswith string:

 if e[9].startswith("1/1")