2016-07-13 5 views
1

Итак, я пытаюсь извлечь ссылку в текстовом файле в Python - эта ссылка зависит от текстового файла и текстового файла, но имеет тот же формат. Я попытался использовать библиотеку re, но продолжаю получать ошибки.Найти подстроку в текстовом файле в Python

Синтаксис ссылки является:

docs.com/searchres.aspx?docformat=all&docid=[SOME NUMBER] - 

Так конец звена имеет ряд Указав в НЕКОТОРЫХ поле и в конце ссылки есть «-» Как я могу искать, находить и сохранять эту ссылку из текстового файла. Спасибо - это мой первый пост на SO

+1

Добро пожаловать в StackOverflow. Пожалуйста, найдите время, чтобы прочитать страницу справки, особенно разделы с названием [«Какие темы можно задать здесь?»] (Http://stackoverflow.com/help/on-topic) и [«Какие типы вопросов я должен не спрашивать? "] (http://stackoverflow.com/help/dont-ask). И что еще более важно, прочитайте [контрольный список вопросов переполнения стека] (http://meta.stackexchange.com/q/156810/204922). Вы также можете узнать о [Минимальных, Полных и Подтверждаемых примерах] (http://stackoverflow.com/help/mcve). – idjaw

+0

Есть только одна такая строка в текстовом файле? Если это так, это должно быть тривиально просто прочитать файл и определить, существует ли строка '' docs.com/searchres.aspx?docformat=all&docid = ["', а затем извлекать следующие символы до тех пор, пока вы не нажмете ''] "" '. –

+0

Да только одна такая строка существует – askannarnia

ответ

0

Вот решение Python, использующее карты памяти. Несколько предостережений:

  1. Вы сказали, что в файле есть только один экземпляр, и если их больше одного, он вернет первый.
  2. Я быстро поставил это вместе из старого кода. Если ] не находится в текстовом файле, он будет продолжать чтение. Взгляните на документацию mmaphere, чтобы узнать, как вы можете изменить код, чтобы быть более надежным.

EDIT: код форматирования Python меня ненавидит, поэтому мне пришлось внести некоторые незначительные изменения, чтобы заставить его заблокировать правильно. Извини за это.

match = open(db, 'r') 
try: 
    search = mmap.mmap(match.fileno(), 0, access=mmap.ACCESS_READ) 
    index = search.find(str(target)) 
    if index != -1: 
     #"This entry exists. We have the index of it, now read the line." 
     search.seek(index) 
     #"Seek to the index." 
     strOut = "" 
     read = search.read(1) 
     while read != ']': 
      strOut = strOut + read 
      read = search.read(1) 
     search.close() 
     match.close() 

     print strOut 
    else: 
     #-1 indicates it's not in the file 
     print strOut 
except Exception as err: 
    match.close() 
    print strOut 
0

Так что этот ответ прост, но работает для небольших файлов. Когда вы говорите «сохранить эту ссылку», я предполагаю, что URL-адрес в строковой переменной достаточно хорош.

import re 

f = open(filename_str, 'r') 
file_content = f.read() 
p = re.compile('docs.com(.)*\-') 
m = p.search(file_content) 
if m != None: 
    link = m.group(0) 
Смежные вопросы