[英]Most efficient way to modify the last line of a large text file in Python
[英]Efficient way to check last term of a line in Python file
我正在編寫一個Python腳本,該腳本需要一個(可能很大)文件。 這是可以格式化輸入文件的示例:
class1 1:v1 2:v2 3:v3 4:v4 5:v5
class2 1:v6 4:v7 5:v8 6:v9
class1 3:v10 4:v11 5:v12 6:v13 8:v14
class2 1:v15 2:v16 3:v17 5:v18 7:v19
其中class1和class2是某個數字,例如1和-1。 (一個好奇的用戶可能會注意到這是一個與LIBSVM相關的文件,但在這種情況下不需要了解軟件。)值v1,v2,...,v19表示任何整數或浮點值。 顯然,就總行數和每行長度而言,我的文件要比這大得多,這就是為什么我在這里關注效率。
我正在嘗試檢查冒號左側的最大價值是什么。 在LIBSVM中,這些稱為“功能”,此處始終為整數。 例如,在上面概述的示例中,第1行的最大特征為5。 第2行的最大特征為6,第3行的最大特征為8,最后,第4行的最大特征為7。 由於8是這些值中的最大值,因此這是我想要的值。 我正在查看一個文件, 每行可能具有數千個功能,並且有數十萬行 。
該文件滿足以下屬性:
現在,我的方法是檢查每行,用空格將每行分開,用冒號將最后一項分開, 然后檢查要素值。 之后,我執行一個程序來檢查最大的featureNum。
file1 = open(...)
max = 0
for line in file1:
linesplit = line.rstrip('\n').split(' ')
val = linesplit[len(linesplit) - 1]
valsplit = val.split(':')
featureNum = valsplit[0]
if (featureNum > max):
max = featureNum
print max
file1.close()
但是我希望有一種更好或更有效的方法 ,例如通過僅獲取換行符之前的那些術語來分析文件的某種方法(也許是避免讀取所有行?)。 我是Python的新手,所以如果我錯過了明顯的事情,也不會感到驚訝。
由於您不必關心一行中的所有功能,而只關心最后一個,因此您無需拆分整行。 我不知道這實際上是否更快,您需要計時並看看。 它絕對不像拆分整行的Pythonic。
def last_feature(line):
start = line.rfind(' ') + 1
end = line.rfind(':')
return int(line[start:end])
with open(...) as file1:
largest = max(last_feature(line) for line in file1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.