python write 写多行_如何用 Python 执行单行命令

一般来说,面对日常处理的一些小任务,直接用 sed,grep 之类的就可以搞定,更复杂一点的就会考虑 awk 或者用一些现成的轮子,要是 awk 搞不定我就只好用 Python 了。但有些时候,我仅仅只是想写一个一次性脚本,不想打开编辑器写所谓 格式优美 的 Python 语句呢?(正如写 Perl 一样随性)

其实在 Python 中也可以使用单行命令,直接用 python -c  即可,虽然这与 Python 之禅中所说的 Readability counts 相悖,但信手拈来,随便用用还是挺方便的。

-c cmd : program passed in as string (terminates option list)

terminates option list 表示 -c 之后的其它选项不起作用,为终极选项。

例如:

python -c "print('Hello World')"
Hello World

-c 之后,要用双引号将命令包起来,import 以;结尾,命令用[]括起来,多行命令用多个[]

python -c "import os,time;[print(i) for i in os.listdir()];[print(time.time())]"

一些比较复杂的命令复杂的命令必须要用[]括起来,否则会报错。

举个实际的例子,比如在生物信息学编程实战一文中第三题 ,hg19 基因组序列的一些探究,jimmy 老师用 Perl 单行命令做了这道题:

perl -alne '{if(/^>/){$chr=$_}else{ $A_count{$chr}+=($_=~tr/Aa//); $T_count{$chr}+=($_=~tr/Tt//);$C_count{$chr}+=($_=~tr/Cc//); $G_count{$chr}+=($_=~tr/Gg//); $N_count{$chr}+=($_=~tr/Nn//); }}END{print "$_    $A_count{$_}    $T_count{$_}    $C_count{$_}    $G_count{$_}    $N_count{$_}" foreach sort keys  %N_count}' test.fa

示例数据:

>chr_1ATCGTCGaaAATGAANccNNttGTAAGGTCTNAAccAAttGggG>chr_2ATCGAATGATCGANNNGccTAAGGTCTNAAAAGG>chr_3ATCGTCGANNNGTAATggGAAGGTCTNAAAAGG>chr_4ATCGTCaaaGANNAATGANGgggTA

结果如下:

>chr_1        13        10        7        10        4>chr_2        11        6        5        8        4>chr_3        10        6        3        10        4>chr_4        9        4        2        7        3

这题用 Python 单行命令也可以写:

cat test.fa | python -c "import sys;from Bio import SeqIO;[print(line.id,line.seq.count('A'),line.seq.count('T'),line.seq.count('C'),line.seq.count('G')) for line in SeqIO.parse(sys.stdin,'fasta')]"

这里我就用了 Biopython 来解析 fasta 格式,所以 Python 的优势就在于有众多现成的模块可以调用,减少了代码量。

再举个例子,比如一行代码转换 genbank 为 fasta :

cat sequence.gb | python -c "import sys;from Bio import SeqIO;SeqIO.write(SeqIO.parse(sys.stdin, 'genbank'),sys.stdout,'fasta')" > sequence.fasta

关于更多 Biopython 的内容可以参见我之前的笔记:

•我的Python笔记·BioPython(一)•我的Python笔记·BioPython(二)•用 BioPython 做一些酷酷的事情(一)•用 BioPython 做一些酷酷的事情(二)

其他例子

•算术:

python -c "print(3.0/2)"

•导入模块并输出结果:

python -c "import math;print(math.sin(1))"

•使用循环输出 1-10:

python -c "for i in range(1,11):print(i)"

•使用多个循环(注意格式):

python -c "for i, j in ((i,j) for i in range (1,11) for j in range(1,11)): print(i, j)"

•实现类似 grep 的功能,输出正则匹配的行:

echo hey | python -c "import sys,re;[sys.stdout.write(line) for line in sys.stdin if re.search('he.', line)]"

•实现类似 sed 的功能,使用正则表达式替换并输出结果:

echo hallo | python -c "import sys,re;[sys.stdout.write(re.sub('h[au]llo', 'hello', line)) for line in sys.stdin]"

•删除前两个字符:

python -c "import sys;[sys.stdout.write(' '.join(line.split(' ')[2:])) for line in sys.stdin]" < input.txt

除了使用 -c 之外,Python 还可以使用 -m 参数直接使用模块

-m mod : run library module as a script (terminates option list)

使用 calendar 模块,输出今年的日历:

python -m calendar
2ee334753d8d5b9cc7b3217ed2a052c5.png

•开启文件分享:

python -m http.server 8000

执行后,在本机打开 http://localhost:8000 ,或者在局域网内的其它机器上打开 http://本机ip:8000,就能访问到执行目录下的文件。

9cd1d812363974a63c2eb92c016e17ec.png

•生成 HTML 格式官方帮助文档:

python -m pydoc -p 9000
1a1d1d15119ba17d342c3d054364fe02.png

•安装 module:

python -m pip install xxx

这种写法相比于 pip install xxx ,在存在多个 Python 版本的环境中,可以精确地控制三方库的安装位置。

•创建、查看和提取 zip 格式压缩包:-l 显示 zip 格式压缩包中的文件列表•-c 创建 zip 格式压缩包•-e 提取 zip 格式压缩包•-t 验证文件是一个有效的 zip 格式压缩包

python -m zipfile -c test.zip tmp1.txt tmp2.txtpython -m zipfile -e test.zip target-dir/python -m zipfile -l test.zip

引用链接

[1]  https://en.wikibooks.org/wiki/Python_Programming/Command-line_one-liners

[2] Python 中 -m 的典型用法、原理解析与发展演变


生信技能树目前已经公开了三个生信知识库,记得来关注哦~

每周文献分享

https://www.yuque.com/biotrainee/weeklypaper

肿瘤外显子分析指南

https://www.yuque.com/biotrainee/wes

生物统计从理论到实践

https://www.yuque.com/biotrainee/biostat


友情宣传

强烈建议你推荐给身边的博士后以及年轻生物学PI,多一点数据认知,让他们的科研上一个台阶:

•生信技能树的2019年终总结,你的生物信息学成长宝藏•2020学习主旋律,B站74小时免费教学视频为你领路•全国巡讲全球听(买一得五),你的生物信息学入门课

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/559847.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小红书点赞收藏有什么用_橱柜门用什么材料好?老师傅开口说话了!听进去算你的,收藏备用...

想做好一个橱柜&#xff0c;橱柜门的材质要选好&#xff0c;而一旦涉及到材质&#xff0c;那些专业生僻的叫法让人眼花缭乱&#xff0c;云里雾里的&#xff0c;难以理解。其实橱柜门的材质大概分为6大类&#xff0c;市面上主流的材质大致有3类。今天FUN姐就跟大家聊聊橱柜门到底…

ddr4服务器内存和普通内存_服务器内存介绍及其供电规范

内存(Memory)也称内存储器或主存储器&#xff0c;与CPU进行高速的数据沟通&#xff0c;用于暂时存放CPU的运算数据。见上图&#xff0c;内存紧挨CPU两侧布局&#xff0c;内存数量和容量根据系统需求和CPU能力决定&#xff0c;内存性能对服务器整体运行快慢起着至关重要的影响。…

小程序新闻列表页面布局代码_论坛小程序·“我的”页面布局

这次让我们来看看界面是怎么布局的吧&#xff01;比如打开模拟器里“我的”页面&#xff0c;找到其所对应的me文件夹里的文件打开me.wxml查看第一段代码&#xff0c;发现其中包含五个view类&#xff0c;他们的属性标签分别是&#xff1a;classamountBg、classimg、classaccount…

准考证打印系统关闭怎么办_2019年执业药师准考证无法正常打印,怎么办?

2019年各地区执业药师准考证打印入口陆续开通&#xff0c;但是很多考生会遇到准考证打印的问题&#xff0c;现小编整理了2019年执业药师准考证无法正常打印情况&#xff0c;供各位考生参考。一、打印准考证必须使用IE浏览器6.0或以上版本。二、禁用或卸载有关拦截工具。(Window…

安卓机更新系统会卡吗_安卓机可以用AirPods Pro吗?告诉你真实体验

[PConline评测]安卓系统可以使用AirPods Pro吗&#xff1f;从AirPods Pro发布起&#xff0c;这问题一直备受关注&#xff0c;毕竟苹果官方宣称AirPods Pro兼容多种苹果设备&#xff0c;可没说兼容安卓机。我们知道其他AirPods产品是可以用在安卓机上的&#xff0c;那么AirPods …

# 解析bt文件_BT、磁力链这些词语是什么意思?

“知其然知其所以然”。我们经常在下载资料的时候能看到BT、磁力链等词语&#xff0c;这些词语到底是什么意思呢&#xff1f;下载都会用&#xff0c;但是你了解吗&#xff1f;BT下载传统的下载模式是每个客户端从服务器拷贝文件&#xff0c;跟校园内常用的FTP一样。因为服务器宽…

vue添加html开启服务器_Vue 项目(HTML5 History 模式) 部署服务器

相信很多小伙伴在用Vue-cli安装的脚手架开发的时候&#xff0c;在开发环境中项目可以很正常的运行&#xff0c;但是进入到生产环境&#xff0c;编译打包后&#xff0c;放入服务器&#xff0c;项目就不正常了&#xff0c;会出现空白页或者路由跳转404等问题。遇到这些问题不要慌…

广数系统u盘支持什么格式_u盘装系统,u盘要格式化成什么格式

展开全部分析如下&#xff1a;1、将u盘制作成u深度u盘启动盘&#xff0c;重启电脑等待出现32313133353236313431303231363533e78988e69d8331333365666237开机画面按下启动快捷键&#xff0c;选择u盘启动进入到u深度主菜单&#xff0c;选取“【02】U深度WIN8 PE标准版(新机器)”…

asp 可否压缩_怎样用ASP压缩文件

多数的时候我们需要压缩文件&#xff0c;保存到特定的位置&#xff0c;或者你可以使用它实现所有你想要的效果。我们需要服务器支持WScript.Shell-多数的站长都不会允许这样的。这里你可以获取下载链接&#xff0c;在下载这个文件之前你可以要么指定相对的路径或者是绝对的路径…

怎么修改ppt的虚线间隔_还有一小时下班,领导交给我一份ppt,做不完不许走!...

相信在职场中的好多人&#xff0c;都会遇到领导突然给任务的时候&#xff0c;遇到这种情况该怎么办呢&#xff1f;还能怎么办&#xff1f;听话&#xff01;干活&#xff01;就是这份ppt&#xff0c;就是它&#xff0c;决定了我的下班时间&#xff01;ppt水平差&#xff0c;时间…

kitti pkl可视化_KITTI 3D Lidar 数据可视化

前言Lilikili&#xff1a;在尝试做Lidar方面的研究的时候&#xff0c;发现对于可视化大家的脑洞还不是很够&#xff0c;所以提供一些思路让大家蛤一下。数据集本次使用的数据集是KITTI 3D object detection条目下面的data_object_velodyne.zip&#xff0c;里面存储了二进制存储…

php mysql 排名_mysql中如何实现排名

mysql中实现排名的方法&#xff1a;使用demo函数&#xff0c;语法为【SELECT banji,avg(score) as AvgS FROM table_test GROUP BY banji ORDER BY AvgS DESC】。mysql中实现排名的方法&#xff1a;可用Demo实现注意里面的A&#xff0c;属于嵌套查询&#xff0c;所以排名会正确…

mysql三表where查询_mysql三表查询sql语句

表结构&#xff1a;Student学生表(学号、姓名、性别、年龄、编辑)Course课程表(编号、课程名称)sc选课表(选课编号、学号、课程编号、成绩)(1)写一个SQL语句&#xff0c;查询选修了“计算机原理”的学生学号和姓名(2)写一个SQL语句&#xff0c;查询“小明”同学选修的课程名称(…

mysql语句创建临时表并存入数据_mysql创建临时表,将查询结果插入已有表中 | 学步园...

今天遇到一个很棘手的问题&#xff0c;想临时存起来一部分数据&#xff0c;然后再读取。我记得学数据库理论课老师说可以创建临时表&#xff0c;不知道mysql有没有这样的功能呢&#xff1f;临时表在内存之中&#xff0c;读取速度应该比视图快一些。然后还需要将查询的结果存储到…

mysql数据库查询笔记_MySql数据库基础笔记(一)

一、表与库的概念数据库管理数据,它是以什么样的形式组成的?生活中的表---->表 table多行多列,传统的数据库都是这样的;声明了表头,一个表创建好了,剩下的就是往表中添加数据多张表放在档案中--->库 database学生信息表,成绩表,记过表 -> 都是这个班级的信息,将这几张…

figtree如何编辑进化树_iTOL快速绘制颜值最高的进化树

iTOL简介大家在看高分文章时&#xff0c;总会惊叹于&#xff0c;为什么人家能做出那么好看而且高大上的系统发育树&#xff0c;而且好看的图也能直接提升文章的档次&#xff0c;冲击高分文章。人家的树不管是从配色还是各种注释信息都让人无可挑剔&#xff0c;而你每次花了半个…

java怎么碰到异常跳过继续执行_Java异常处理很难吗?BAT大厂的架构师是怎么处理Java异常的?...

欢迎关注专栏《Java架构筑基》——专注于Java技术的研究与分享&#xff01;Java架构筑基​zhuanlan.zhihu.comJava架构筑基——专注于Java技术的研究与分享&#xff01;后续文章将首发此专栏&#xff01;欢迎各位Java工程师朋友投稿和关注# 链接 Java程序员福利"常用资料分…

mysql 回滚之后抛出异常_在PHP中 开始事务后,程序抛出异常 没有执行commit也没有执行rollback mysql事务会回滚吗?...

网上有人说开启事务后 sql语句执行错误或程序出错 没有执行rollback的情况下&#xff0c;下一次运行就会自动commit程序出错不会回滚rollback但是也有人说抛出异常等 程序如果MySQL存在没有提交的事务&#xff0c;那么这时候 AUTOCOMMIT 自动提交的参数应该是为 0 的。不过如果…

python列表常用方法实践_python 列表list 常用方法

stus [] #空的列表stu2 list() #空的列表stus ["fff", "zzz", "aaa"]#增stus.append("ppp") #在列表的末尾增加一个元素# print(stus)stus.insert(9, "qqq") #当指定的索引不存在&#xff0c;则默认插入元素到最后# prin…

python 2x可以打么_Python打基础一定要吃透这68个内置函数

内置函数就是Python给你提供的&#xff0c;拿来直接用的函数&#xff0c;比如print.&#xff0c;input等。截止到python版本3.6.2 &#xff0c;python一共提供了68个内置函数&#xff0c;具体如下abs() dict() help() min() setattr()all() dir() hex() next() slice()any() di…