2011-06-15 209 views
2

我有一個數據集,看起來像這樣:轉換字符串轉換成int()

0 _ _ 23.0186E-03 
10 _ _51.283E-03 
20 _ _125.573E-03 

,其中數字是由一條線排列,行(下劃線表示空格)。

右欄中的數字當前是該行字符串的一部分。我試圖將右側的數字轉換爲數值(0.0230186等)。我可以使用int()將它們轉換成簡單的數字形式,但我需要更改「E」才能到達那裏。如果你知道如何改變它的任何E值,如E-01,E-22,這將是非常有用的。

目前我的代碼看起來像這樣:

fin = open('stringtest1.txt', "r") 
fout = open("stringtest2.txt", "w") 

while 1: 
    x=fin.readline() 

    a=x[5:-1] 
    ##conversion code should go here 

    if not x: 
     break 

    fin.close() 
    fout.close() 
+1

請用您工作的語言標記您的問題。它對您有好處,因爲人們使用他們熟練的語言過濾標籤,並且對其他人都有好處,因爲他們可以提供實際的相關答案。 – eldarerathis 2011-06-15 21:16:52

+0

看起來像Python,所以我已經標記爲 – MartW 2011-06-15 21:17:11

+1

謝謝,這是我的第一篇文章,承諾我會在未來做的更好。 – austinco 2011-06-15 21:33:10

回答

5

我建議的轉換以下:

float(x.split()[-1]) 

str.split()將在白色的空間分割提供任何參數的時候,和float()將轉換將字符串轉換爲數字,例如:

>>> '20 125.573E-03'.split() 
['20', '125.573E-03'] 
>>> float('20 125.573E-03'.split()[-1]) 
0.12557299999999999 
+0

爲我需要的東西製作精美。謝謝 – austinco 2011-06-15 21:33:52

+0

@ user800395很高興它的工作,我的答案旁邊有一個複選框的大綱,您可以單擊它接受它作爲解決方案。 – 2011-06-15 21:35:23

1
float("20 _ _125.573E-03".split()[-1].strip("_")) 
4

你應該使用上下文處理程序和文件句柄是可迭代:

with open('test1.txt') as fhi, open('test2.txt', 'w') as fho: 
    for line in fhi: 
    f = float(line.split()[-1]) 

    fho.write(str(f)) 
+0

再次來得太遲;-)只是我輸入的答案... – 2011-06-15 21:23:10

2

如果我理解你想要正確地做什麼,有沒有必要做與E的東西:Python中浮動('23 .0186E -03')返回0.0230186,我認爲這是你想要的。

所有你需要的是:

fout = open("stringtest2.txt", "w") 
for line in open('stringtest1.txt', "r"): 
    x = float(line.strip().split()[1]) 
    fout.write("%f\n"%x) 
fout.close() 

使用輸出字符串%F將確保輸出將十進制(無E公司)。如果你只是使用STR(X),你可能會得到E公司在根據原始值的輸出,所以正確的轉換方法取決於你想要的輸出:

>>> str(float('23.0186E-06')) 
'2.30186e-05' 
>>> "%f"%float('23.0186E-06') 
'0.000023' 
>>> "%.10f"%float('23.0186E-06') 
'0.0000230186' 

您可以添加任意數量%F到指定精度。有關使用%進行字符串格式設置的更多信息,請參閱http://rgruet.free.fr/PQR26/PQR2.6.html#stringMethods(向下滾動到「使用%運算符進行字符串格式設置」部分)。