Форматированный ввод в Python - PullRequest
0 голосов
/ 26 декабря 2009

У меня особенная проблема. Мне нужно читать (из текстового файла), используя Python только те подстроки, которые присутствуют в предопределенном диапазоне смещений. Допустим, 5-8 и 12-16.

Например, если строка в файле имеет вид:

abcdefghi akdhflskdhfhglskdjfhghsldk

тогда я хотел бы прочитать два слова - "efgh" и "kdhfl". Потому что в слове "efgh" смещение символа "e" равно 5, а смещения "h" - 8. Аналогично, другое слово "kdhfl".

Обратите внимание, что пробелы также добавляют к смещению. Infact, пробелы в моем файле не «последовательно происходят» в каждой строке и не могут зависеть от извлечения слов, представляющих интерес. Вот почему я должен рассчитывать на компенсацию.

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

В ожидании ответов!

Редактировать -

Да, количество пробелов в каждой строке может меняться, и также учитываются смещения. Например, рассмотрим эти две строки -

abcz d 
a bc d 

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

Ответы [ 3 ]

5 голосов
/ 26 декабря 2009

при условии, что это файл,

for line in open("file"):
    print line[4:8] , line[11:16]
1 голос
/ 26 декабря 2009

Чтобы извлечь фрагменты из смещений, просто прочитайте каждую строку в строку, а затем получите доступ к подстроке со срезом ([от: до]).

Непонятно, что вы говорите о противоречивых пробелах. Если пробел добавляет к смещению, он должен быть последовательным, чтобы иметь смысл. Если количество пробелов может измениться, но фактически учитывает смещения, вы не можете надежно извлечь ваши данные.

В добавленном примере, пока смещение d остается неизменным, вы можете извлечь его с помощью нарезки.

>>> s = 'a bc d'
>>> s[5:6]
'd'
>>> s = 'abc  d'
>>> s[5:6]
'd'
0 голосов
/ 26 декабря 2009

Что мешает вам использовать регулярное выражение? Помимо пробелов, смещения меняются?

/.{4}(.{4}).{4}(.{4})/
...