get nth line of string in python

后端 未结 9 1810
萌比男神i
萌比男神i 2021-01-02 08:50

How can you get the nth line of a string in Python 3? For example

getline(\"line1\\nline2\\nline3\",3)

Is there any way to do this

相关标签:
9条回答
  • 2021-01-02 09:33

    a functional approach

    >>> import StringIO
    >>> from itertools import islice
    >>> s = "line1\nline2\nline3"
    >>> gen = StringIO.StringIO(s)
    >>> print next(islice(gen, 2, 3))
    line3
    
    0 讨论(0)
  • 2021-01-02 09:33

    From the comments it seems as if this string is very large. If there is too much data to comfortably fit into memory one approach is to process the data from the file line-by-line with this:

    N = ...
    with open('data.txt') as inf:
        for count, line in enumerate(inf, 1):
            if count == N: #search for the N'th line
                print line
    

    Using enumerate() gives you the index and the value of object you are iterating over and you can specify a starting value, so I used 1 (instead of the default value of 0)

    The advantage of using with is that it automatically closes the file for you when you are done or if you encounter an exception.

    0 讨论(0)
  • 2021-01-02 09:33

    A more efficient solution than splitting the string would be to iterate over its characters, finding the positions of the Nth and the (N - 1)th occurence of '\n' (taking into account the edge case at the start of the string). The Nth line is the substring between those positions.

    Here's a messy piece of code to demonstrate it (line number is 1 indexed):

    def getLine(data, line_no):
        n = 0
        lastPos = -1
        for i in range(0, len(data) - 1):
            if data[i] == "\n":
                n = n + 1
                if n == line_no:
                    return data[lastPos + 1:i]
                else:
                    lastPos = i;
    
    
    
        if(n == line_no - 1):
            return data[lastPos + 1:]
        return "" # end of string
    

    This is also more efficient than the solution which builds up the string one character at a time.

    0 讨论(0)
提交回复
热议问题