2015-10-19 2 views
0

Я пытаюсь составить список результатов сканирования для сканирования для сообщений в целях отладки.Невозможно добавить многострочный текст для отображения в виде одного элемента

Вот мой код:

post_list = [] 

with open('last_crawl_output.txt','r') as f: 
    crawl_output = f.read() 

# Find first 'referer' that indicates start of scrapy crawl AFTER initial crawl of search results page 
iter = re.finditer("referer", crawl_output) 
referer_list = [m.start(0) for m in iter] 

# Find indicator of crawl finished. 
iter2 = re.finditer("scrapy", crawl_output) 
closing_list = [m.start(0) for m in iter2] 

del referer_list[0] 

pos1 = referer_list[0] 

for pos1 in referer_list: 
    # Get largest scrapy index after each referer index. 
    pos2_index = bisect.bisect(closing_list, pos1) 
    # Get post from positions. 
    pos2 = closing_list[pos2_index+1] 
    post = crawl_output[pos1:pos2-21] 

Я также попытался с помощью post_list.append(post), но безрезультатно.

Вот пример вывода.

Строка Я хочу добавить в post_listhere

Это то, что я получаю взамен. Вот post_list с постов добавил: output

Когда я использую вставку, она отделяется от \n

+0

Не могли бы вы предоставить пример 'referer_list' и' clos_list'? Я также немного смущен тем, почему вы не просто пишете регулярное выражение, которое ищет как начальные, так и конечные индикаторы за один раз (например, 'post_list = re.findall (" referrer. *? Scrapy ", crawl_output)') , – Blckknght

+0

@Blckknght Я полный noob, так что я делаю это так, как знаю. Я обновил вопрос. Может ли регулярное выражение допускать это в одной строке, как у вас? – Manix

+0

Я уверен, вы можете придумать одно регулярное выражение, которое соответствует тому, что вы ищете, хотя я подозреваю, что я представил в своем комментарии, не так ли (он заканчивается первой ссылкой «scrapy» после того, как «referrer» найдено, а не второе). – Blckknght

ответ

0

я решил работать свой путь вокруг этой проблемы списка, как это:

# Splits post by newline, adds to list 
post_lines = post.split('\n') 

# Add the words "Next Post" to differentiate each post. 
post_lines.append('Next Post') 

# Print each line, and get perfect formatting. 
for line in post_lines: 
    print line 
0

Лучшим решением было бы вместо этого добавлять слова в словарь. Это сохраняет форматирование и использует меньше кода.

post_count = 0 
post_dict = {} 

for pos1 in referer_list: 

    post_count += 1 

    pos2_index = bisect.bisect(closing_list, pos1) 
    pos2 = closing_list[pos2_index+1] 

    post = crawl_output[pos1:pos2-21] 

    post_dict[post_count] = post