Reputation: 157
The goal is to get the text after '%' and before '--'.
However sometimes text is being cut off before '--', like at a random letter. Why is this not working properly? Thank you in advance! PS using 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')
And here is the function used to get a fortune.
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
Example input of a fortune from the text file that is providing input:
%
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/ )
Expected output: The NSA knows what you did last summer. But no one, in the NSA or outside it, knows why they should.
Actual output: The NSA knows what yo
I have been asked how the pickled file is made. It is done with pickle.dump in this function:
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()
Upvotes: 1
Views: 88
Reputation: 4310
Why not just use regex to find the fortunes instead?
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
Upvotes: 2