python for循环得到的不是词组而是字母

各位大虾好!小虾最近遇到一个很奇葩的问题。

我有一个文件,假设叫list.txt,内容如下:

[root@zabbix opt]# cat list.txt 
1000 lebron_james
9999 kevin_durant
3232 chris_paul
878 james_harden

现在我想得到如下的输出:
lebron_james@qq.com
kevin_durant@qq.com
chris_paul@qq.com
james_harden@qq.com

既然每一个后面都加上@qq.com,于是我就使用for循环来搞呗,我的脚本如下:

#!/usr/bin/env python
import os
import commands

name = commands.getoutput("cat list.txt|awk '{print $2}'")
for i in name:
       a = i + '@qq.com'
       print a

结果执行出来的结果是:
l@qq.com
e@qq.com
b@qq.com
r@qq.com
o@qq.com
n@qq.com
_@qq.com
j@qq.com
a@qq.com
m@qq.com
e@qq.com
s@qq.com

@qq.com
k@qq.com
e@qq.com
v@qq.com
i@qq.com
n@qq.com
_@qq.com
d@qq.com
u@qq.com
r@qq.com
a@qq.com
n@qq.com
t@qq.com
(下略)

为什么会这样?请问应该如何修改?

阅读 4.4k
3 个回答
with open('list.txt','r') as f:
    f=f.readlines()
for i in f:
    print('{user}@qq.com'.format(user=i.split(' ')[1].strip()))

awk '{print $2"@qq.com"}' list.txt

新手上路,请多包涵

name = commands.getoutput("cat list.txt|awk '{print $2}'")
返回的是字符串,对它for循环当然是一个个字母拿出来啦。
把name = commands.getoutput("cat list.txt|awk '{print $2}'")后面加上splitlines()就好啦

即name = commands.getoutput("cat list.txt|awk '{print $2}'").splitlines()

这时name的值就是 ["lebron_james","kevin_durant", ...],再for循环就对了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题