несовместимый отступ с Python после разделения - PullRequest
1 голос
/ 13 июля 2011

редактирование в процессе повторной отправки иногда позже В процессе редактирования будет повторно отправлять иногда позже выполняемое редактирование будет отправлено повторно позже

Ответы [ 4 ]

2 голосов
/ 13 июля 2011

Вероятно, на ваш вопрос ответили другие, но поскольку вы работаете с очень большим файлом, вы должны использовать метод генератора для ввода построчно.

См. Этот вопрос для деталей. Ленивый метод чтения больших файлов в Python?

0 голосов
/ 13 июля 2011

Почему бы не использовать регулярное выражение split?

import re
with open(<infile>) as inf:
    for annot_info in f:
        split_array = re.split(r'(\W+)(chr\w+):(\d+)..(\d+)', annot_info)
        #do your sql processing here.
        #write out to a file if you wish to.

даст вам ['', '+', 'chr6', '140302505', '140302604', '']. Вы можете использовать то же самое в ваших текущих методах mysql.

PS: шаблон регулярного выражения, который я использовал, даст вам пустые строки в начале и в конце. Измените регулярное выражение или измените вставку sql, чтобы исключить первый и последний элементы массива при нажатии.

0 голосов
/ 13 июля 2011

Это должно работать:

import re #Regex may be the easiest way to split that line

with open(infile) as in_f, open(outfile,'w') as out_f:
    f = (i for i in in_f if i.rstrip()) #iterate over non empty lines
    for line in f:
        _, k = line.split('\t', 1)
        x = re.findall(r'^1..100\t([+-])chr(\d+):(\d+)\.\.(\d+).+$',k)
        if not x:
            continue
        out_f.write(' '.join(x[0]) + '\n')
0 голосов
/ 13 июля 2011

Вы можете использовать .strip(), чтобы удалить любые пробелы вокруг элемента перед его вводом.Это позволило бы немного прояснить ситуацию и решить любые проблемы с отступами.

Например:

b=a.split('chr').strip() # No white space either side now
c=b[1].split(':').strip() # No white space
d=c[1].split('..').strip()
e=b[0]+'\t'+c[0]+'\t'+d[0]+'\t'+d[1]+'\t'+'\n'
rfh.write(e)

Что будет сделано, так это удалить все существующие пробелы и оставить только ваши \t 's существуют.

...