Python 怎么像 awk 那样按列取数据?

2018-03-20 17:25:18 +08:00
 karlxu
比如用 shell 取 39 到 40 行的第 1 列到 24 列的数据:
sed -n "39,40p" test.txt|awk '{print $1 $24}'
用 Python 如何实现?
试过直接用 os.system,但是有‘|’管道,执行报错了。。。求指教
3725 次点击
所在节点    问与答
8 条回复
20150517
2018-03-20 17:42:07 +08:00
numpy
huhutian
2018-03-20 17:46:03 +08:00
python map
ilovebaicai
2018-03-20 17:52:07 +08:00
试试。

```
f = open('../filename')
for i in f.readlines()[39:41]:
print i.split('|')[0:25]
```
Gandum
2018-03-20 18:03:36 +08:00
不对吧,os.system 是可以执行带 | 的命令的。
我想你应该检查下是不是因为 | 导致的问题。
不过如果你要获取结果的话应该用 subprocess.getstatusoutput()
karlxu
2018-03-20 21:09:10 +08:00
@ilovebaicai 你好,我试了下还是不行:
1.TXT 如下:
aaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbb
cccccccccccccccc
ddddddddddddddddd
2034934243 wwwwwww 324324234235
324324234235 fdsfdsafdsafdsa dddddddddddddddd
fdsfdsafdsafdsa

test.py:
f = open('1.txt')
for i in f.readlines()[4:6]:

print i.split('|')[0:15]

最后执行的结果:
['2034934243 wwwwwww 324324234235\n']
['324324234235 fdsfdsafdsafdsa dddddddddddddddd\n']

我其实是想要 2034934243 和 324324234235
karlxu
2018-03-20 21:10:01 +08:00
@Gandum 有可能是 cygwin 的问题,我明天用真是的 Linux 试试,谢谢了
karlxu
2018-03-20 21:20:43 +08:00
@Gandum 果然,我用 Linux 下就可以了:
test.py
import os
os.system("sed -n "5,6p" 1.txt|awk '{print $1 $15}'")
运行:
[root@VM_105_185_centos ~]# python test.py
2034934243
324324234235
karlxu
2018-03-21 08:25:46 +08:00
@20150517 因为我那个 TXT 里有 string,不是纯数字,试了 numpy 还不行。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/439790

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX