2017-08-15 67 views
0

我有一個名爲ping.txt的文件,它具有顯示ping ping ip所用的時間n次的值。 我有我的ping.txt包含:如何從字符串中提取浮動數字並在python上使用簡單操作添加該數字

time=35.9 
time=32.4 

我寫了一個Python代碼單獨提取該浮數,並使用正則表達式添加它。但我覺得下面的代碼是完成我的任務的間接方式。 findall正則表達式我在這裏使用輸出一個列表,他們轉換,加入,然後添加。

import re 
add,tmp=0,0 
with open("ping.txt","r+") as pingfile: 
     for i in pingfile.readlines(): 
       tmp=re.findall(r'\d+\.\d+',i) 
       add=add+float("".join(tmp)) 

     print("The sum of the times is :",add) 

我的問題是如何在不使用正則表達式或其他任何方式,以減少在我的代碼行數,使其更有效地解決這個問題? 換句話說,我可以使用不同的正則表達式或其他方法來執行此操作嗎? 〜

+0

您可以使用CSV和分隔符設置爲'='。我不能決定這是否會很愚蠢。 – FamousJameous

+0

是的。如果我在csv文件中添加數字,那很愚蠢。但將這些數字存儲在csv文件中,然後使用python代碼添加它會使其變得複雜。我的目標是使用不同的正則表達式或其他簡單的代碼來執行python本身的上述任務,而不是創建額外的.csv文件 –

回答

2

您可以使用以下方法:

with open('ping.txt', 'r') as f: 
    s = sum(float(line.split('=')[1]) for line in f) 

輸出:

>>> with open('ping.txt', 'r') as f: 
...  s = sum(float(line.split('=')[1]) for line in f) 
... 
>>> s 
68.3 

注:我假設你的文件的每一行包含time=some_float_number

0

使用這RE

tmp = re.findall("[0-9]+.[0-9]+",i) 

之後運行一個循環

sum = 0 
for each in tmp: 
    sum = sum + float(each) 
1

你可以做這樣的:

import re 
total = sum(float(s) for s in re.findall(r'\d+(\.\d+)?', open("ping.txt","r+").read())) 
+0

謝謝先生!我覺得你的代碼仍然是以複雜的方式編寫的,儘管你已經做了幾行代碼 –

1

如果你有字符串:

>>> s='time=35.9' 

然後得到的價值,你只需要:

>>> float(s.split('=')[1])) 
35.9 

你不需要的東西用一個簡單的分隔符正則表達式。

1

您可以使用字符串拆分以分割每條線'='並將它們追加到t一個列表。最後,你可以簡單地調用sum功能打印列表中的元素的總和

temp = [] 
with open("test.txt","r+") as pingfile: 
    for i in pingfile.readlines(): 
     temp.append(float(str.split(i,'=')[1]))  

    print("The sum of the times is :",sum(temp)) 
相關問題