我有两个要求。
第一个要求 - 我想读取文件的最后一行,并将最后一个值分配给python中的变量。
第二项要求 -
这是我的示例文件。
<serviceNameame="demo" wsdlUrl="demo.wsdl" serviceName="demo"/>
<context:property-placeholder location="filename.txt"/>
从这个文件中我想读取内容,即 filename.txt ,它将在<context:property-placeholder location= .
之后。并希望将该值赋给python中的变量。
答案 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
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()