【发布时间】:2014-02-11 22:16:39
【问题描述】:
对不起,如果我在 python 和 unix shell 脚本之间做出了不正确的假设。我对这门语言还是很陌生。希望我能很快学会。
我想知道在 python 中是否有一个等效的行来为变量赋值,就像你可以从 unix shell 脚本中一样?
例如,我们可以在 unix shell 脚本中这样做:
for line in $(cat file)
do
IFS=' ' read var1 var2 var3 <<< "$line"
echo "$var1, $var2, $var3" >> outfile
done
它用空格分隔行,并将第一个空格之前的所有内容分配给 var1,将第一个空格和第二个空格之间的所有内容分配给 var2,并将之后的所有内容分配给 var3。
我们可以在 python 中做同样的事情吗?我想我为 python 找到了一些东西,但它不起作用,可能是 b/c 我不知道我在做什么。 var2 和 var3 给了我一个超出范围的消息,打印 var1 显示变量“行”,除了所有空格都被删除了。不确定 rstrip 或 split 是否对线路做了什么。无论如何,提前感谢您的帮助,并且在我尝试学习 python 时不要嘲笑我;)
file = open('data.txt','r')
for line in file:
line.rstrip()
tokens = line.split(' ')
var1 = tokens[0]
var2 = tokens[1]
var3 = tokens[2]
outfile.write(var1 + "," + var2 + "," + var3)
【问题讨论】:
-
能否提供“data.txt”的内容?
-
旁白:当您在写入文件时可以简单地引用
tokens[0]、tokens[1]和tokens[2]时,将唯一变量分配给tokens的每个索引是多余的。 -
您确定该行实际上是用空格而不是制表符分隔的吗?因为如果没有实际的空格,
line.split(' ')将返回一个包含一个元素的列表,即整行。这正是您所看到的。 -
另外,一般来说,不要说“给我一个超出范围的消息”;使用回溯粘贴实际的异常。即使那些 gobbledegook 对你没有任何意义,但它通常对那些试图帮助的人来说意义重大。 (在这种情况下可能不会,但除非您真正理解错误,否则不要认为它们没有用。)
-
顺便说一句:
line.rstrip()没有做任何有用的事情,因为rstrip()不修改字符串,它返回一个新字符串。 (事实上,nothing 在 Python 中修改字符串;它们是不可变的。)所以,line = line.rstrip()或tokens = line.rstrip().split(' ')就是您想要的。但无论哪种方式,这都不会导致您的问题。