32
Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.
Tôi có hai yêu cầu.
Yêu cầu đầu tiên-Tôi muốn đọc dòng cuối cùng của một tệp và gán giá trị cuối cùng cho một biến trong Python.-I want to read the last line of a file and assign the last value to a variable in python.
Yêu cầu thứ hai--
Đây là tập tin mẫu của tôi.
Từ tệp này, tôi muốn đọc nội dung i.e fileName.txt sẽ là sau ____ 11. Và muốn gán giá trị đó cho một biến trong Python.filename.txt which will be after
with open['filename.txt'] as f:
for line in f:
pass
last_line = line
1.And want to assign that value to a variable in python.
Đã hỏi ngày 16 tháng 9 năm 2017 lúc 21:16Sep 16, 2017 at 21:16
1
Một giải pháp đơn giản, không yêu cầu lưu trữ toàn bộ tệp trong bộ nhớ [ví dụ với
with open['filename.txt'] as f:
for line in f:
pass
last_line = line
2 hoặc cấu trúc tương đương]:with open['filename.txt'] as f:
for line in f:
pass
last_line = line
Đối với các tệp lớn sẽ hiệu quả hơn khi tìm đến cuối tệp và di chuyển về phía sau để tìm một dòng mới, ví dụ:
import os
with open['filename.txt', 'rb'] as f:
try: # catch OSError in case of a one line file
f.seek[-2, os.SEEK_END]
while f.read[1] != b'\n':
f.seek[-2, os.SEEK_CUR]
except OSError:
f.seek[0]
last_line = f.readline[].decode[]
Lưu ý rằng tệp phải được mở ở chế độ nhị phân, nếu không, sẽ không thể tìm kiếm từ cuối.
Đã trả lời ngày 20 tháng 1 năm 2019 lúc 17:16Jan 20, 2019 at 17:16
Eugene Yarmasheugene YarmashEugene Yarmash
135K37 Huy hiệu vàng309 Huy hiệu bạc367 Huy hiệu đồng37 gold badges309 silver badges367 bronze badges
6
Tại sao bạn không đọc tất cả các dòng và lưu trữ dòng cuối cùng cho biến?
with open['filename.txt', 'r'] as f:
last_line = f.readlines[][-1]
Alex Waygood
5.2263 huy hiệu vàng18 Huy hiệu bạc44 Huy hiệu đồng3 gold badges18 silver badges44 bronze badges
Đã trả lời ngày 16 tháng 9 năm 2017 lúc 21:28Sep 16, 2017 at 21:28
gpopidesgpopidesgpopides
6445 Huy hiệu bạc12 Huy hiệu Đồng5 silver badges12 bronze badges
2
Thực hiện kiểm tra kích thước và tìm kiếm ngược một số byte nhất định từ cuối tệp nếu nó chứa ít nhất nhiều byte:
with open[filename, 'rb'] as myfile:
if os.path.getsize[filename] > 200:
myfile.seek[-200, 2]
line = myfile.readlines[][-1].decode["utf-8"]
Mở ở chế độ nhị phân là cần thiết trong Python3, không thể tìm kiếm kết hợp cuối không khác. myfile.seek [-200, 2] sẽ đặt con trỏ tệp hiện tại 200 ký tự trước khi kết thúc tệp [2], sau đó dòng cuối cùng [-1] được lấy từ các đường đọc [] và được giải mã.
Đã trả lời ngày 4 tháng 6 năm 2021 lúc 11:59Jun 4, 2021 at 11:59
Trên các hệ thống có lệnh
with open['filename.txt'] as f:
for line in f:
pass
last_line = line
3, bạn có thể sử dụng with open['filename.txt'] as f:
for line in f:
pass
last_line = line
3, đối với các tệp lớn sẽ làm giảm sự cần thiết của việc đọc toàn bộ tệp.from subprocess import Popen, PIPE
f = 'yourfilename.txt'
# Get the last line from the file
p = Popen[['tail','-1',f],shell=False, stderr=PIPE, stdout=PIPE]
res,err = p.communicate[]
if err:
print [err.decode[]]
else:
# Use split to get the part of the line that you require
res = res.decode[].split['location="'][1].strip[].split['"'][0]
print [res]
Lưu ý: Lệnh
with open['filename.txt'] as f:
for line in f:
pass
last_line = line
5 chỉ được yêu cầu cho with open['filename.txt'] as f:
for line in f:
pass
last_line = line
6res = res.split['location="'][1].strip[].split['"'][0]
sẽ làm việc cho
with open['filename.txt'] as f:
for line in f:
pass
last_line = line
7Đã trả lời ngày 17 tháng 9 năm 2017 lúc 8:52Sep 17, 2017 at 8:52
Rolf of Saxonyrolf của SachsenRolf of Saxony
20.2k3 Huy hiệu vàng35 Huy hiệu bạc54 Huy hiệu đồng3 gold badges35 silver badges54 bronze badges
Anh ta không chỉ hỏi làm thế nào để đọc các dòng trong tệp, hoặc làm thế nào để đọc dòng cuối cùng thành một biến. Anh ta cũng đang hỏi làm thế nào để phân tích một chuỗi con từ dòng cuối cùng, chứa giá trị mục tiêu của anh ta.
Đây là một cách. Đó có phải là cách ngắn nhất? Không, nhưng nếu bạn không biết cách cắt dây, bạn nên bắt đầu bằng cách tìm hiểu từng chức năng tích hợp được sử dụng ở đây. Mã này sẽ nhận được những gì bạn muốn:
# Open the file
myfile = open["filename.txt", "r"]
# Read all the lines into a List
lst = list[myfile.readlines[]]
# Close the file
myfile.close[]
# Get just the last line
lastline = lst[len[lst]-1]
# Locate the start of the label you want,
# and set the start position at the end
# of the label:
intStart = lastline.find['location="'] + 10
# snip off a substring from the
# target value to the end [this is called a slice]:
sub = lastline[intStart:]
# Your ending marker is now the
# ending quote ["] that is located
# at the end of your target value.
# Get it's index.
intEnd = sub.find['"']
# Finally, grab the value, using
# another slice operation.
finalvalue = sub[0:intEnd]
print finalvalue
Đầu ra lệnh in sẽ trông như thế này:
filename.txt
Các chủ đề được đề cập ở đây:
- Đọc tệp văn bản
- Lập danh sách Python các dòng từ nội dung, để dễ dàng có được dòng cuối cùng bằng cách sử dụng chỉ mục không dựa trên không
8.with open['filename.txt'] as f: for line in f: pass last_line = line
- Sử dụng
9 để lấy vị trí chỉ mục của chuỗi trong chuỗiwith open['filename.txt'] as f: for line in f: pass last_line = line
- Sử dụng
0 để có được chất nềnimport os with open['filename.txt', 'rb'] as f: try: # catch OSError in case of a one line file f.seek[-2, os.SEEK_END] while f.read[1] != b'\n': f.seek[-2, os.SEEK_CUR] except OSError: f.seek[0] last_line = f.readline[].decode[]
Tất cả các chủ đề này đều nằm trong tài liệu Python - không có gì thêm ở đây và không cần nhập khẩu để sử dụng các chức năng tích hợp được sử dụng ở đây.
Chúc mừng, -= Cameron
-=Cameron
Đã trả lời ngày 16 tháng 9 năm 2017 lúc 21:58Sep 16, 2017 at 21:58
Tổng quát để đọc dòng thứ n đến cuối cùng
Như nhiều người khác đã nói, đối với các tệp lớn, bất kỳ cách tiếp cận nào không tìm đến cuối cùng hoặc bắt đầu từ cuối tệp đều không hiệu quả. Cách tiếp cận tìm kiếm câu trả lời hàng đầu là tuyệt vời mặc dù. Nếu bất cứ ai khác đang tìm kiếm một giải pháp đọc dòng thứ n đến cuối cùng của tệp, thì đây là một giải pháp tôi đã viết. Cũng rất nhanh và hiệu quả cho các tệp lớn [lấy theo MS cho tệp 7GB trên mạng].
def read_n_to_last_line[filename, n = 1]:
"""Returns the nth before last line of a file [n=1 gives last line]"""
num_newlines = 0
with open[filename, 'rb'] as f:
try:
f.seek[-2, os.SEEK_END]
while num_newlines < n:
f.seek[-2, os.SEEK_CUR]
if f.read[1] == b'\n':
num_newlines += 1
except OSError:
f.seek[0]
last_line = f.readline[].decode[]
return last_line
Đã trả lời ngày 1 tháng 8 lúc 15:07Aug 1 at 15:07
Bạn có thể đọc và chỉnh sửa tất cả các dòng làm một cái gì đó như:
with open['filename.txt'] as f:
for line in f:
pass
last_line = line
0Đã trả lời ngày 16 tháng 9 năm 2017 lúc 21:40Sep 16, 2017 at 21:40
3