2016-02-24 2 views
1

Цель состоит в том, чтобы получить текст после «%» и до «-».Разделение проблемы в Python

Однако иногда текст обрезается до '-', как при случайной букве. Почему это работает неправильно? Заранее спасибо! PS с использованием Python 3.5.

if destiny=='fortune': 
    fortuneformat= fortune_print.split('%')[-1] 
    print (fortuneformat) 
    _1_fortuneformat= fortuneformat.split("--")[0] 

    fortunesay = str(_1_fortuneformat) 

FYI:

fortune_print= get_random_fortune('quotes1.txt') 

А вот функция используется, чтобы получить состояние.

def get_random_fortune(fortune_file): 
    """ 
    Get a random fortune from the specified file. Barfs if the corresponding 
    ``.dat`` file isn't present.byt 
    :Parameters: 
     fortune_file : str 
      path to file containing fortune cookies 
    :rtype: str 
    :return: the random fortune 
    """ 
    fortune_index_file = fortune_file + '.dat' 
    if not os.path.exists(fortune_index_file): 
     print('Can\'t find file "%s"' % fortune_index_file) 

    fortuneIndex = open(fortune_index_file, 'rb') 
    data = pickle.load(fortuneIndex) 
    fortuneIndex.close() 
    randomRecord = random_int(0, len(data) - 1) 
    (start, length) = data[randomRecord] 

    f = open(fortune_file, 'rU') 
    f.seek(start) 
    fortuneCookie = f.read(length) 
    f.close() 
    return fortuneCookie 

Пример вход гадалке из текстового файла, который вносит свой вклад:

% 
The NSA knows what you did last summer. But no one, in the NSA or outside it, 
knows why they should. 

    -- Shlomi Fish 
    -- NSA Facts by Shlomi Fish and Friends (http://www.shlomifish.org/humour/bits/facts/NSA/) 

Ожидаемый результат: The NSA knows what you did last summer. But no one, in the NSA or outside it, knows why they should.

Фактический выход: The NSA knows what yo

Я спросил, как маринованный файл. Это делается с pickle.dump в этой функции:

def make_fortune_data_file(fortune_file, quiet=False): 
    """ 
    Create or update the data file for a fortune cookie file. 
    :Parameters: 
     fortune_file : str 
      path to file containing fortune cookies 
     quiet : bool 
      If ``True``, don't display progress messages 
    """ 
    fortune_index_file = fortune_file + '.dat' 
    if not quiet: 
     pass 
     #print ('Updating "%s" from "%s"...' % (fortune_index_file, fortune_file)) 

    data = [] 
    shortest = sys.maxsize 
    longest = 0 
    for start, length, fortune in _read_fortunes(open(fortune_file, 'rU')): 
     data += [(start, length)] 
     shortest = min(shortest, length) 
     longest = max(longest, length) 

    fortuneIndex = open(fortune_index_file,'wb') 
    pickle.dump(data, fortuneIndex,protocol=4,fix_imports=True) 
    fortuneIndex.close() 
+0

вы можете размещен пример ввода образца, и ожидается выход против фактического выпуска продукции? –

+0

Код выглядит в порядке. Опубликуйте [mcve]. – Kevin

+0

Привет, я добавил образец ввода и ожидаемый результат против фактического вывода. Надеюсь, это облегчит анализ моего сообщения. Огромное спасибо. – stuffatwork190

ответ

2

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

s = """% 
The NSA knows what you did last summer. But no one, in the NSA or outside it, 
knows why they should. 

    -- Shlom%i Fish 
    -- NSA Facts by Shlomi Fish and Friends 
(http://www.shlomifish.org/humour/bits/facts/NSA/) 
% XSLT is the worst thing since non-sliced bread. -- Shlomi Fish -- 
XSLT Facts by Shlomi Fish and Friends (""" 

re.findall("(?s)(?<=%).*?(?=--)",s) 


Out[154]: 
['\nThe NSA knows what you did last summer. But no one, in the NSA or outside it,\nknows why they should.\n\n ', 
'i Fish\n ', 
' XSLT is the worst thing since non-sliced bread. '] 

https://regex101.com/r/dQ9bD3/1

+0

Спасибо! Это работает для некоторых, но не для всех. Например - исходный текст удачи:% XSLT - худшая вещь, так как не нарезанный хлеб. - Шломи Рыба - XSLT факты Шломи Рыба и друзья (http://www.shlomifish.org/humour/bits/facts/XSLT/) % Выход из регулярного выражения: [] – stuffatwork190

+0

Выхода перед тем регулярное выражение применяется (используя печать (fortune_print)): mmer Glau Facts by Shlomi Fish and Friends (http://www.shlomifish.org/humour/bits/facts/Summer-Glau/) % XSLT - худшее, поскольку без нарезки хлеб. - Shlomi Fish - X – stuffatwork190

+0

@ stuffatwork190 Пожалуйста, не добавляйте код или разделительный вывод через комментарии. Как вы можете видеть, форматирование не имеет смысла. –

Смежные вопросы