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一样。因为服务器宽…

怎么修改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;所以排名会正确…

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 的。不过如果…

mygeneration mysql_利用Mygeneration 自动生成maping文件和entity类文件

利用Mygeneration 自动生成maping文件和entity类文件Mygeneration下载要下载1.3.0.3版本&#xff0c; 默认支持mysql了&#xff0c;不用再安装mysql的驱动了。Template Code : 主要使用的模板代码&#xff0c;会实时展示在Template Source选项卡中Interface Code : 根据Templat…

mysql schema命名规范_数据库设计 命名及编码规范

http://blog.csdn.net/seusoftware/archive/2010/04/24/5524414.aspx引用一、综述命名和编码过程中&#xff0c;定义有意义的名称&#xff0c;以易于理解、方便书写为原则。(1)避免使用中文&#xff0c;尽量使用全拼音或全英文&#xff0c;以方便国际化&#xff1b;(2)避免拼音…

怎么检测mysql主从正常_使用pt-table-checksum检查主从复制是否正常

其实对于一个小小的&#xff24;&#xff22;&#xff21;来说&#xff0c;有时候是无法避免这些问题的。于是我们就需要一个工具&#xff0c;来检查主从复制是否正常&#xff0c;是否出现了错误。pt-table-checksum。相关阅读&#xff1a;MySQL 主从复制事件校验 MySQL Replic…

java 自动类型_java类型自动转换

package com.kevin.basic;/** java类型自动转换方面的知识点* int类型 double类型 默认类型*/public class Test {/*** param args*/public static void main(String[] args) {// TODO Auto-generated method stub/* int类型是整数的默认类型。* (1)第一种&#xff1a;正确运行…

a java虚拟机_Java虚拟机

内存分配以及回收Java虚拟机运行时数据区&#xff0c;分为以下几个模块&#xff0c;包含所有线程共有的数据区和线程单独享有的数据区。程序计数器&#xff1a;字节码行号&#xff0c;通过这个计数器来选取下一条需要执行的指令&#xff0c;线程独有。虚拟机栈&#xff1a;线程…

java tostring的用处_JAVA的tostring()方法的作用是什么呢?

展开全部1&#xff0e;toString方法Object类具有一个toString()方法&#xff0c;你创建的每个类都会继承62616964757a686964616fe4b893e5b19e31333365666236该方法。它返回对象的一个String表示&#xff0c;并且对于调试非常有帮助。然而对于默认的toString()方法往往不能满足需…

java软件工程_java复习

计算机一些物理装置按系统结构的要求构成一个有机整体为计算机软件运行提供物质基础。计算机硬件&#xff1a;CPU、主板(motherboard)、内存(memory)、电源、主机箱、硬盘、显卡、键盘、鼠标、显示器等IO&#xff1a;input输入(鼠标键盘)、output输出(显示器音响)冯诺依曼体系结…

java getparametermap_重写getParameterMap后,报错 ,

想做个参数过滤功能&#xff0c;如何修改&#xff0c;或者其他实现方式ServletExcludeHadler类在HttpServletRequestWrapper类里重写了getParameterMap现在报错java.lang.ClassCastException: org.apache.catalina.util.ParameterMap cannot be cast to java.util.HashMapat co…