在python中读取文件的最后一行

时间:2017-09-16 21:16:03

标签: python python-2.7 python-3.x python-requests

我有两个要求。

第一个要求 - 我想读取文件的最后一行,并将最后一个值分配给python中的变量。

第二项要求 -

这是我的示例文件。

<serviceNameame="demo" wsdlUrl="demo.wsdl" serviceName="demo"/>
<context:property-placeholder location="filename.txt"/>

从这个文件中我想读取内容,即 filename.txt ,它将在<context:property-placeholder location= .之后。并希望将该值赋给python中的变量。

7 个答案:

答案 0 :(得分:7)

为什么你只读取所有行并将最后一行存储到变量?

f_read = open("filename.txt", "r")
last_line = f_read.readlines()[-1]
f_read.close()

答案 1 :(得分:2)

一种简单的解决方案,不需要将整个文件存储在内存中(例如,使用file.readlines()或等效结构):

with open('filename.txt') as f:
    for line in f:
        pass
    last_line = line

对于大文件,查找文件末尾并向后移动以找到换行符会更有效,例如:

import os

with open('filename.txt', 'rb') as f:
    f.seek(-2, os.SEEK_END). 
    while f.read(1) != b'\n':
        f.seek(-2, os.SEEK_CUR) 
    last_line = f.readline().decode()

答案 2 :(得分:2)

来自https://docs.python.org/3/library/collections.html

的示例
from collections import deque

def tail(filename, n=10):
    'Return the last n lines of a file'
    with open(filename) as f:
        return deque(f, n) 

答案 3 :(得分:1)

他不只是询问如何读取文件中的行,或者如何将最后一行读入变量。他还询问如何解析最后一行的子字符串,包含他的目标值。

这是一种方法。这是最短路吗?不,但如果您不知道如何切割字符串,则应首先学习此处使用的每个内置函数。此代码将获得您想要的内容:

# 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

打印命令输出应如下所示:

filename.txt

此处涉及的主题:

  • 阅读文本文件
  • 从内容中创建一个Python列表,以便使用从零开始的索引len(List) -1轻松获取最后一行。
  • 使用find获取字符串中字符串的索引位置
  • 使用slice获取子字符串

所有这些主题都在Python文档中 - 这里没有额外的内容,也不需要导入来使用此处使用的内置函数。

干杯,
- =卡梅伦

答案 4 :(得分:1)

在具有tail命令的系统上,您可以使用tail,对于大文件,这将使您无需阅读整个文件。

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)

注意:仅decode()

需要python3命令
res = res.split('location="')[1].strip().split('"')[0]

适用于python2.x

答案 5 :(得分:1)

检查尺码

如果 os.path.getsize(file) > 200:

  with open(fname, 'rb') as myfile:
  myfile.seek(-200, 2)
  line = myfile.readlines()[-1].decode("utf-8")

在 python3 中需要以二进制模式打开(不能进行非零的端相对查找)。 myfile.seek(-200, 2) 将当前文件指针设置在距文件末尾 200 个字符处(2) 然后它将读取行,最后返回并对其进行解码

答案 6 :(得分:-1)

您可以阅读和编辑所有行,例如:

file = open('your_file.txt', 'r')
read_file = file.readlines()
file.close()

file1 = open('your_file.txt', 'w')

var = 'filename.txt'

for lec in range(len(read_file)):
    if lec == 1:
        file1.write('<context:property-placeholder location="%s"/>' % var)
    else:
        file1.write(read_file[lec])
file1.close()