Python3: как увеличить строковое значение в цикле «for» - PullRequest
0 голосов
/ 24 мая 2018

У меня есть файл tabular.text (названный "xfile").Пример его содержимого приведен ниже.

Scaffold2_1 WP_017805071.1  26.71   161 97                    
Scaffold2_1 WP_006995572.1  26.36   129 83       
Scaffold2_1 WP_005723576.1  26.92   130 81   
Scaffold3_1 WP_009894856.1  25.77   245 43  
Scaffold8_1 WP_017805071.1  38.31   248 145   
Scaffold8_1 WP_006995572.1  38.55   249 140    
Scaffold8_1 WP_005723576.1  34.88   258 139   
Scaffold9_1 WP_005645255.1  42.54   446 144

Обратите внимание, как каждая строка начинается с Scaffold(y)_1, где y - число.Я написал следующий код для печати каждой строки, начинающейся со следующих терминов: Scaffold2 и Scaffold8.

 with open("xfile", 'r') as data:

 for line in data.readlines():
     if "Scaffold2" in line:
       a = line
       print(a)

     elif "Scaffold8" in line:
       b = line
       print(b)

Мне было интересно, есть ли способ рекомендовать увеличить часть (y)Scaffold () в операторах if и elif?

Идея состоит в том, чтобы позволить сценарию искать каждую строку, содержащую «Scaffold (y)», и сохранять каждую строку с определенным числом (y) в своемсобственная переменная, которая будет затем напечатана.Очевидно, это будет намного быстрее, чем вводить каждый номер вручную.

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

Хорошо, похоже, что вы хотите получить что-то в формате вроде:

entries = {y1: ['Scaffold(y1)_...', 'Scaffold(y1)_...'], y2: ['Scaffold(y2)_...', 'Scaffold(y2)_...'], ...}

Тогда вы можете сделать что-то подобное (я предполагаю, что все ваши строки начинаются одинаковокак вы показали, значение y всегда является 8-й позицией в строке):

entries = dict()
for line in data.readlines():
    if not line[8] in entries.keys():
        entries.update({line[8]: [line]})
    else:
        entries[line[8]].append(line)
print(entries)

Таким образом, вы получите словарь в формате, который я вам показал выше - вывод:

{'2': ['Scaffold2_1 WP_017805071.1  26.71   161 97', 'Scaffold2_1 WP_006995572.1  26.36   129 83', 'Scaffold2_1 WP_005723576.1  26.92   130 81'], '3': ['Scaffold3_1 WP_009894856.1  25.77   245 43'], '8': ['Scaffold8_1 WP_017805071.1  38.31   248 145', 'Scaffold8_1 WP_006995572.1  38.55   249 140', 'Scaffold8_1 WP_005723576.1  34.88   258 139'], '9': ['Scaffold9_1 WP_005645255.1  42.54   446 144']}

РЕДАКТИРОВАТЬ: я все еще не до конца понимаю, зачем вам это нужно.

0 голосов
/ 24 мая 2018

Вы можете попробовать это, это проще, чем , используя Regex .Если это не то, что вы ожидаете, дайте мне знать, я изменю код.

for line in data.readlines():
    if line[0:8] == "Scaffold" and line[8].isdigit():
        print(line)

Я просто проверяю 9-ю позицию в вашей строке, т.е. (8-й индекс).Если это цифра, я печатаю строку.Как вы сказали, я печатаю, если ваш " y " является цифрой.Я не увеличиваю это.Работа по увеличению уже выполнена вашим циклом for.

...