私には2つの要件があります。
最初の要件-ファイルの最後の行を読み取り、Pythonの変数に最後の値を割り当てたい。
2番目の要件-
これが私のサンプルファイルです。
<serviceNameame="demo" wsdlUrl="demo.wsdl" serviceName="demo"/>
<context:property-placeholder location="filename.txt"/>
このファイルから内容を読み取りたいfilename.txtは<context:property-placeholder location= .
の後にあり、その値をPythonの変数に割り当てます。
ファイル全体をメモリに保存する必要のない単純なソリューション(例: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()
なぜすべての行を読み取り、最後の行を変数に格納するのですか?
with open('filename.txt', 'r') as f:
last_line = f_read.readlines()[-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
_で機能します
彼は、ファイルの行を読み取る方法や、変数に最後の行を読み取る方法を尋ねているだけではありません。また、ターゲット値を含む、最後の行の部分文字列を解析する方法を尋ねています。
これが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のドキュメントにあります。ここには何も追加されておらず、ここで使用された組み込み関数を使用するためにインポートする必要はありません。
乾杯、
-=キャメロン
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)