很抱歉,如果我在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显示变量“line”,除了删除所有空格。不确定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)
答案 0 :(得分:2)
是的,您可以使用元组解包语法:
a, b, c = (1, 2, 3)
可以使用如下:
with open('data.txt','r') as infile:
for line in infile:
line = line.rstrip()
parts = line.split(' ')
outfile.write(','.join(parts)) # now you don't have to worry about how many elements there are in each line
一些笔记(因为你自我认定为初学者):
file
或list
或dict
或任何其他内置类型命名。with
语法?这被称为上下文。它非常方便。这样,打开后我不必关闭文件。上下文经理为我照顾line = line.rstrip()
。那是因为rstrip()
返回一个字符串,而不改变原始字符串。答案 1 :(得分:0)
代码:
test_str = "aaa bbbb cccc dddd eeee"
tokens = test_str.split(' ')
if len(tokens) > 3:
var1 = tokens[0]
var2 = tokens[1]
var3 = tokens[2:]
>>> print(var1, '+', var2, '+', var3)
aaa + bbbb + ['cccc', 'dddd', 'eeee']
var3不是字符串,但我认为您可以将其更改为您想要的任何格式。: - )
答案 2 :(得分:0)
我想我偶然发现了我正在寻找的东西。希望这也有助于其他人:
for line in fileOutput:
var1, var2, var3, var4, var5, var6, var7 = line.rstrip().split(' ')
答案 3 :(得分:-1)
怎么样:
#!/usr/local/cpython-2.7/bin/python
#!/usr/local/cpython-3.3/bin/python
with open('data.txt','r') as infile, open('outfile.txt', 'w') as outfile:
for line in infile:
tokens = line.split()
assert len(tokens) == 3
fieldname1, fieldname2, fieldname3 = tokens
outfile.write('{}.{}.{}\n'.format(fieldname1, fieldname1, fieldname3))
这在2.7或3.3上运行,没有任何变化。
您应该使用比fieldname1等更多的描述性变量名称。