How to check for EOF in Python?

前端 未结 5 2437
深忆病人
深忆病人 2021-02-15 16:54

How do I check for EOF in Python? I found a bug in my code where the last block of text after the separator isn\'t added to the return list. Or maybe there\'s a better way of ex

5条回答
  •  挽巷
    挽巷 (楼主)
    2021-02-15 17:36

    You might find it easier to solve this using itertools.groupby.

    def get_text_blocks(filename):
        import itertools
        with open(filename,'r') as f:
            groups = itertools.groupby(f, lambda line:line.startswith('-- -'))
            return [''.join(lines) for is_separator, lines in groups if not is_separator]
    

    Another alternative is to use a regular expression to match the separators:

    def get_text_blocks(filename):
        import re
        seperator = re.compile('^-- -.*', re.M)
        with open(filename,'r') as f:
            return re.split(seperator, f.read())
    

提交回复
热议问题