Hướng dẫn python get last line from string - python lấy dòng cuối cùng từ chuỗi

Làm thế nào bạn có thể nhận được dòng thứ n của một chuỗi trong Python 3? Ví dụ

getline["line1\nline2\nline3",3]

Có cách nào để làm điều này bằng cách sử dụng các chức năng stdlib/buildin không? Tôi thích một giải pháp trong Python 3, nhưng Python 2 cũng ổn.

hỏi ngày 15 tháng 7 năm 2012 lúc 12:20Jul 15, 2012 at 12:20

Ramchandra Apteramchandra ApteRamchandra Apte

4.0032 Huy hiệu vàng24 Huy hiệu bạc44 Huy hiệu đồng2 gold badges24 silver badges44 bronze badges

0

Hãy thử những điều sau:

s = "line1\nline2\nline3"
print s.splitlines[][2]

Đã trả lời ngày 15 tháng 7 năm 2012 lúc 12:24Jul 15, 2012 at 12:24

Đánh dấu Longairmark LongairMark Longair

428K71 Huy hiệu vàng407 Huy hiệu bạc322 Huy hiệu đồng71 gold badges407 silver badges322 bronze badges

3

một cách tiếp cận chức năng

>>> import StringIO
>>> from itertools import islice
>>> s = "line1\nline2\nline3"
>>> gen = StringIO.StringIO[s]
>>> print next[islice[gen, 2, 3]]
line3

Đã trả lời ngày 15 tháng 7 năm 2012 lúc 13:07Jul 15, 2012 at 13:07

Iruvariruvariruvar

22.2k6 Huy hiệu vàng51 Huy hiệu bạc81 Huy hiệu đồng6 gold badges51 silver badges81 bronze badges

5

`my_string.strip[].split["\n"][-1]`

CEZAR

11.2k6 Huy hiệu vàng43 Huy hiệu bạc81 Huy hiệu đồng6 gold badges43 silver badges81 bronze badges

Đã trả lời ngày 24 tháng 10 năm 2018 lúc 1:03Oct 24, 2018 at 1:03

Sử dụng bộ đệm chuỗi:

import io    
def getLine[data, line_no]:
    buffer = io.StringIO[data]
    for i in range[line_no - 1]:
        try:
            next[buffer]
        except StopIteration:
            return '' #Reached EOF

    try:
        return next[buffer]
    except StopIteration:
        return '' #Reached EOF

Đã trả lời ngày 15 tháng 7 năm 2012 lúc 12:31Jul 15, 2012 at 12:31

Joel Cornettjoel CornettJoel Cornett

23.6K9 Huy hiệu vàng61 Huy hiệu bạc85 Huy hiệu Đồng9 gold badges61 silver badges85 bronze badges

6

Một giải pháp hiệu quả hơn so với việc chia chuỗi sẽ lặp lại các ký tự của nó, tìm các vị trí của lần thứ n và [n - 1] xảy ra của '\ n' [có tính đến trường hợp cạnh khi bắt đầu chuỗi] . Dòng thứ n là chuỗi con giữa các vị trí đó.

Đây là một đoạn mã lộn xộn để chứng minh nó [số dòng là 1 được lập chỉ mục]:

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

Điều này cũng hiệu quả hơn so với giải pháp xây dựng chuỗi một ký tự tại một thời điểm.

Đã trả lời ngày 15 tháng 7 năm 2012 lúc 12:32Jul 15, 2012 at 12:32

5

Từ các ý kiến ​​có vẻ như chuỗi này rất lớn. Nếu có quá nhiều dữ liệu để thoải mái phù hợp với bộ nhớ, một cách tiếp cận là xử lý dữ liệu từ từng dòng tệp với điều này:

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

Sử dụng Enumerate [] cung cấp cho bạn chỉ mục và giá trị của đối tượng bạn đang lặp lại và bạn có thể chỉ định giá trị bắt đầu, vì vậy tôi đã sử dụng 1 [thay vì giá trị mặc định là 0]

Ưu điểm của việc sử dụng

s = "line1\nline2\nline3"
print s.splitlines[][2]
0 là nó tự động đóng tệp cho bạn khi bạn hoàn thành hoặc nếu bạn gặp phải một ngoại lệ.

Đã trả lời ngày 15 tháng 7 năm 2012 lúc 12:22Jul 15, 2012 at 12:22

LevonlevonLevon

Huy hiệu vàng 133K3333 gold badges198 silver badges187 bronze badges

2

Vì bạn đã đưa ra điểm hiệu quả của bộ nhớ, điều này có tốt hơn không:

s = "line1\nline2\nline3"

# number of the line you want
line_number = 2

i = 0
line = ''
for c in s:
   if i > line_number:
     break
   else:
     if i == line_number-1 and c != '\n':
       line += c
     elif c == '\n':
       i += 1

Đã trả lời ngày 15 tháng 7 năm 2012 lúc 12:45Jul 15, 2012 at 12:45

Vaidikvaidikvaidik

2.1411 Huy hiệu vàng15 Huy hiệu bạc22 Huy hiệu đồng1 gold badge15 silver badges22 bronze badges

3

Đã viết thành hai chức năng cho khả năng đọc

    string = "foo\nbar\nbaz\nfubar\nsnafu\n"

    def iterlines[string]:
      word = ""
      for letter in string:
        if letter == '\n':
          yield word
          word = ""
          continue
        word += letter

    def getline[string, line_number]:
      for index, word in enumerate[iterlines[string],1]:
        if index == line_number:
          #print[word]
          return word

    print[getline[string, 4]]

Đã trả lời ngày 20 tháng 9 năm 2018 lúc 16:15Sep 20, 2018 at 16:15

Han Solohan Solohan solo

6.1971 Huy hiệu vàng14 Huy hiệu bạc18 Huy hiệu đồng1 gold badge14 silver badges18 bronze badges

Giải pháp của tôi [hiệu quả và nhỏ gọn]:

def getLine[data, line_no]:
    index = -1
    for _ in range[line_no]:index = data.index['\n',index+1]
    return data[index+1:data.index['\n',index+1]]

Đã trả lời ngày 15 tháng 7 năm 2012 lúc 13:05Jul 15, 2012 at 13:05

Ramchandra Apteramchandra ApteRamchandra Apte

4.0032 Huy hiệu vàng24 Huy hiệu bạc44 Huy hiệu đồng2 gold badges24 silver badges44 bronze badges

1

Làm cách nào để có được dòng cuối cùng của một chuỗi trong Python?

Sử dụng str.Tìm [] phương thức để có được chỉ mục của ký tự dòng đầu tiên.Sử dụng phương thức str.rfind [] để lấy chỉ mục của ký tự dòng cuối cùng.Use the str. rfind[] method to get the index of the last newline character.

Làm thế nào để bạn có được dòng thứ hai của một chuỗi trong Python?

Nhân vật Newline trong Python: Trong Python, nhân vật dòng mới \ n, được sử dụng để tạo ra một dòng mới.Khi được chèn vào một chuỗi, tất cả các ký tự sau khi ký tự được thêm vào một dòng mới.the new line character “\n” is used to create a new line. When inserted in a string all the characters after the character are added to a new line.

Bài Viết Liên Quan

Chủ Đề