Reading specific lines only

后端 未结 28 1517
天命终不由人
天命终不由人 2020-11-22 05:08

I\'m using a for loop to read a file, but I only want to read specific lines, say line #26 and #30. Is there any built-in feature to achieve this?

Thanks

28条回答
  •  慢半拍i
    慢半拍i (楼主)
    2020-11-22 05:49

    For the sake of completeness, here is one more option.

    Let's start with a definition from python docs:

    slice An object usually containing a portion of a sequence. A slice is created using the subscript notation, [] with colons between numbers when several are given, such as in variable_name[1:3:5]. The bracket (subscript) notation uses slice objects internally (or in older versions, __getslice__() and __setslice__()).

    Though the slice notation is not directly applicable to iterators in general, the itertools package contains a replacement function:

    from itertools import islice
    
    # print the 100th line
    with open('the_file') as lines:
        for line in islice(lines, 99, 100):
            print line
    
    # print each third line until 100
    with open('the_file') as lines:
        for line in islice(lines, 0, 100, 3):
            print line
    

    The additional advantage of the function is that it does not read the iterator until the end. So you can do more complex things:

    with open('the_file') as lines:
        # print the first 100 lines
        for line in islice(lines, 100):
            print line
    
        # then skip the next 5
        for line in islice(lines, 5):
            pass
    
        # print the rest
        for line in lines:
            print line
    

    And to answer the original question:

    # how to read lines #26 and #30
    In [365]: list(islice(xrange(1,100), 25, 30, 4))
    Out[365]: [26, 30]
    

提交回复
热议问题