2011-11-28 166 views
1

在Python中我試圖從存儲在txt中的信息設置一個變量。我可以設置它,但它不能作爲一個數字。它被存儲爲別的東西嗎? 這裏是我的.txt文件(所有的信息被寫在一行,沒有\ NS):如何使用Python從文本文件中獲取整數?

11 14 15 3 

這裏是我的腳本:

def break_words(text): 
    words = text.split(' ') 
    return words 

file_name = open("set_initial.txt") 
words = break_words(file_name.read()) 

shift_l1 = words[0] 
shift_l2 = words[1] 
shift_l3 = words[2] 
shift_l4 = words[3] 
shift_l5 = words[4] 
shift_l6 = words[5] 

# this part is to verify that the variables are being set: 
print shift_l1, shift_l2, shift_l3, shift_l4 

while shift_l4 < 28: 
# and the script goes on into a loop from here 

我使用這種方法,因爲的長度txt中的值將會改變(例如:114 34 2 4318)。當我運行腳本時,print函數工作正常,並返回我的變量作爲我的.txt中的數字(分別爲11 14 15 3),所以shift_l4打印爲3,所以我的WHILE循環應該正常工作。但事實並非如此。正如我所說,我認爲我的變量沒有被設置爲.txt中數字的數字值,但可能只是文本值?我不知道如何解決它。任何幫助或想法?

謝謝

回答

1

「文件名」不是文件對象的好名稱。對於以字符串表示的數字集合而言,「單詞」不是一個好名字。 「shift_l5 = words [4]」和「shift_l6 = words [5]」將失敗,因爲您只有4個數字。

請注意,print "3"print 3產生相同的結果。使用print repr(something)而不是僅僅使用print something來處理您實際擁有的數據。

試試這個:當然

f = open("set_initial.txt") 
numbers = [int(n) for n in f.read().split()] 
print numbers 
assert len(numbers) == 4 
shift_l1, shift_l2, shift_l3, shift_l4 = numbers 
print shift_l1, shift_l2, shift_l3, shift_l4 
+0

好吧,我在這方面做了一些小小的閱讀,但看起來更合理,謝謝。腳本實際上轉到了shift_l8,並且在txt中有12組數字,但爲了簡化起見,我忽略了它。可惜我忘了省略shift_l5&shift_l6,所以我失敗了,哈哈。感謝您提供名稱提示。 – Gronk

+0

@ user1042034您還應該選擇一個答案並關閉它,這將有助於您下次回答您的問題。 –

2

我認爲問題是你的比較字符串和int有兩種不同的類型。假設你正在做一個數值比較,你可能想明確地將你的shift_l4轉換爲int。 INT(shift_l4)。

+0

啊。將它改爲shift_l1 = int(words [0])等等。這似乎是一種非常低效的方法,將一個可變長度的變量從txt寫入python腳本中的變量,因爲我必須將它應用於單詞[x]的每個單獨迭代。有一個更好的方法嗎? – Gronk

+0

@ user1042034:當然有更好的方法;看到我的答案。 –

+1

@SteveRobillard:這不是演員陣容,而是轉換。 Python不會執行強制轉換。 –

相關問題