Во-первых, я хотел бы сказать, что это место помогло мне больше, чем я когда-либо мог отплатить. Я хотел бы сказать спасибо всем, кто помог мне в прошлом :).
Я пытаюсь разделить некоторый текст из сообщения определенного стиля. Он оформляется так:
DATA|1|TEXT1|STUFF: some random text|||||
DATA|2|TEXT1|THINGS: some random text and|||||
DATA|3|TEXT1|some more random text and stuff|||||
DATA|4|TEXT1|JUNK: crazy randomness|||||
DATA|5|TEXT1|CRAP: such random stuff I cant believe how random|||||
У меня есть код, показанный ниже, который объединяет текст, добавляя пробел между словами, и добавляет его в строку с именем «ТЕКСТ», поэтому он выглядит так:
STUFF: some random text THINGS: some random text and some more random text and stuff JUNK: crazy randomness CRAP: such random stuff I cant believe how random
Мне нужно, чтобы он был отформатирован следующим образом:
DATA|1|TEXT1|STUFF: |||||
DATA|2|TEXT1|some random text|||||
DATA|3|TEXT1|THINGS: |||||
DATA|4|TEXT1|some random text and|||||
DATA|5|TEXT1|some more random text and stuff|||||
DATA|6|TEXT1|JUNK: |||||
DATA|7|TEXT1|crazy randomness|||||
DATA|8|NEWTEXT|CRAP: |||||
DATA|9|NEWTEXT|such random stuff I cant believe how random|||||
Номера строк просты, я сделал это, а также возврат каретки. Что мне нужно, так это взять «дерьмо» и изменить часть, которая говорит «TEXT1», на «NEWTEXT».
Мой код сканирует строку в поисках ключевых слов, затем добавляет их в свою собственную строку, затем добавляет текст под ними, за которым следует следующее ключевое слово в отдельной строке и т. д. Вот мой код, который у меня есть до сих пор:
#this combines all text to one line and adds to a string
while current_segment.move_next('DATA')
TEXT = TEXT + " " + current_segment.field(4).value
KEYWORD_LIST = [STUFF:', THINGS:', JUNK:']
KEYWORD_LIST1 = [CRAP:']
#this splits the words up to search through
TEXT_list = TEXT.split(' ')
#this searches for the first few keywords then stops at the unwanted one
for word in TEXT_list:
if word in KEYWORD_LIST:
my_output = my_output + word
elif word in KEYWORD_LIST1:
break
else:
my_output = my_output + ' ' + word
#this searches for the unwanted keywords leaving the output blank until it reaches the wanted keyword
for word1 in TEXT_list:
if word1 in KEYWORD_LIST:
my_output1 = ''
elif word1 in KEYWORD_LIST1:
my_output1 = my_output1 + word1 + '\n'
else:
my_output1 = my_output1 + ' ' + word1
#my_output is formatted back the way I want deviding up the text into 65 or less character lines
MAX_LENGTH = 65
my_wrapped_output = wrap(my_output,MAX_LENGTH)
my_wrapped_output1 = wrap(my_output1,MAX_LENGTH)
my_output_list = my_wrapped_output.split('\n')
my_output_list1 = my_wrapped_output1.split('\n')
for phrase in my_output_list:
if phrase == "":
SetID +=1
output = output + "DATA|" + str(SetID) + "|TEXT| |||||"
else:
SetID +=1
output = output + "DATA|" + str(SetID) + "|TEXT|" + phrase + "|||||"
for phrase2 in my_output_list1:
if phrase2 == "":
SetID +=1
output = output + "DATA|" + str(SetID) + "|NEWTEXT| |||||"
else:
SetID +=1
output = output + "DATA|" + str(SetID) + "|NEWTEXT|" + phrase + "|||||"
#this populates the fields I need
value = output
Затем я форматирую «my_output» и «my_output1», добавляя слово «NEWTEXT» туда, куда оно идет. Этот код проходит через каждую строку в поисках ключевого слова, затем вставляет это ключевое слово и возвращает каретку. Как только он получает другой «KEYWORD_LIST1», он останавливается и удаляет остальную часть текста, а затем запускает следующий цикл. Моя проблема в том, что приведенный выше код дает мне это:
DATA|1|TEXT1|STUFF: |||||
DATA|2|TEXT1|some random text|||||
DATA|3|TEXT1|THINGS: |||||
DATA|4|TEXT1|some random text and|||||
DATA|5|TEXT1|some more random text and stuff|||||
DATA|6|TEXT1|JUNK: |||||
DATA|7|TEXT1|crazy randomness|||||
DATA|8|NEWTEXT|crazy randomness|||||
DATA|9|NEWTEXT|CRAP: |||||
DATA|10|NEWTEXT|such random stuff I cant believe how random|||||
Он берет текст перед «KEYWORD_LIST1» и добавляет его в раздел NEWTEXT. Я знаю, что есть способ сделать группы из ключевого слова и текста после него, но я не понимаю, как это реализовать. Любая помощь приветствуется.
Спасибо.
Вот что мне пришлось сделать, чтобы заставить его работать на меня:
KEYWORD_LIST = ['STUFF:', 'THINGS:', 'JUNK:']
KEYWORD_LIST1 = ['CRAP:']
def text_to_message(text):
result=[]
for word in text.split():
if word in KEYWORD_LIST or word in KEYWORD_LIST1:
if result:
yield ' '.join(result)
result=[]
yield word
else:
result.append(word)
if result:
yield ' '.join(result)
def format_messages(messages):
title='TEXT1'
for message in messages:
if message in KEYWORD_LIST:
title='TEXT1'
elif message in KEYWORD_LIST1:
title='NEWTEXT'
my_wrapped_output = wrap(message,MAX_LENGTH)
my_output_list = my_wrapped_output.split('\n')
for line in my_output_list:
if line = '':
yield title + '|'
else:
yield title + '|' + line
for line in format_messages(text_to_message(TEXT)):
if line = '':
SetID +=1
output = "DATA|" + str(SetID) + "|"
else:
SetID +=1
output = "DATA|" + str(SetID) + "|" + line
#this is needed instead of print(line)
value = output
ALL_CAPS
и обычный регистр не смешиваются в именах переменных. ВашTEXT_list
мог бы быть более точно названtext_list
. Просто небольшое замечание. - person brc   schedule 20.09.2011csv
, а не делать это самостоятельно. - person Dave   schedule 20.09.2011TEXT
?) и желаемый вывод. - person unutbu   schedule 20.09.2011