2011-11-28 164 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不会执行强制转换。 –

相关问题