Reading specific lines only

后端 未结 28 1522
天命终不由人
天命终不由人 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条回答
  • 2020-11-22 05:49

    For the sake of offering another solution:

    import linecache
    linecache.getline('Sample.txt', Number_of_Line)
    

    I hope this is quick and easy :)

    0 讨论(0)
  • 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]
    
    0 讨论(0)
  • 2020-11-22 05:52

    @OP, you can use enumerate

    for n,line in enumerate(open("file")):
        if n+1 in [26,30]: # or n in [25,29] 
           print line.rstrip()
    
    0 讨论(0)
  • 2020-11-22 05:52

    I think this would work

     open_file1 = open("E:\\test.txt",'r')
     read_it1 = open_file1.read()
     myline1 = []
     for line1 in read_it1.splitlines():
     myline1.append(line1)
     print myline1[0]
    
    0 讨论(0)
提交回复
热议问题