一般来说,面对日常处理的一些小任务,直接用 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

•开启文件分享:

python -m http.server 8000

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


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

python -m pydoc -p 9000

•安装 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小时免费教学视频为你领路•全国巡讲全球听(买一得五),你的生物信息学入门课

python write 写多行_如何用 Python 执行单行命令相关推荐

  1. python删除excel第一行_如何用 Python 清洗数据?

    林骥的第 38 篇文章 0. 序言在做数据分析之前,我们首先要明确数据分析的目标,然后应用数据分析的思维,对目标进行细分,再采取相应的行动.我们可以把数据分析细分为以下 8 个步骤:(1)读取(2)清 ...

  2. python能写什么脚本_如何用python编写一个阴阳师脚本(自动刷御魂,业原火)(2)...

    在上一篇文章里,我们已经安装好了python,安装好了所有需要的库,现在可以开始码代码了嗷 先让我们来分析一下需要实现的脚本功能,首先就是这个开始战斗此时队友还没来... 当队友(舍友)进来时,开始战 ...

  3. python能制作游戏吗_如何用python写一个小游戏

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 引言最近python语言大火,除了在科学计算领域python有用武之地之外,在游 ...

  4. 如何用命令行写java程序_如何用java实现doc命令行

    如何用java实现doc命令行, dir显示当前所有目录下的文件 cd 文件目录 进入到该目录 cd ..退到上级目录,一面是我写的代码,调试了. 不过有点小bug就是当你进去的是文件就会提示空指针异 ...

  5. python写一个接口_如何用python写接口

    如何用python写接口?具体步骤如下: 1.实例化server 2.装饰器下面的函数变为一个接口 3.启动服务 开发工具和流程: python库:flask =>实例化server:serve ...

  6. python简单可视化聊天界面_如何用Python制作可视化输入界面

    继续研究Python的应用,我们在有些程序中需要输入一些参数,可由几种方式实现 1.直接写在程序里,适合编程使用 2.使用input()函数,运行程序时输入 3.做成可视化界面,然后让程序获得 今天主 ...

  7. 用python做舆情分析系统_如何用Python做舆情时间序列可视化?

    如何批量处理评论信息情感分析,并且在时间轴上可视化呈现?舆情分析并不难,让我们用Python来实现它吧. 痛点 你是一家连锁火锅店的区域经理,很注重顾客对餐厅的评价.从前,你苦恼的是顾客不爱写评价.最 ...

  8. python代码模拟宇宙天体_如何用python模拟一个星系?

    在一开始,还是要感谢一下凌晨晓骥. 我的这个回答相当于对他的答案的一个补充.主要目标是帮助大家安装Gadget-2,并引导你们自己画出银河碰撞的视频. 那么开始了! 首先看一下我们的目标星系碰撞模拟_ ...

  9. 怎样用python搭建简单的系统_如何用Python搭建一个简单的推荐系统?

    推荐系统的相关知识我们已在前文中提到,在这篇文章中,我们会介绍如何用Python来搭建一个简单的推荐系统. 本文使用的数据集是MovieLens数据集,该数据集由明尼苏达大学的Grouplens研究小 ...

最新文章

  1. swift3.0阿里百川反馈
  2. python 示列:抓取网页所有a连接
  3. [NC15034]德玛西亚万岁
  4. Windoes普通用户使用管理员下安装的软件
  5. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1101:不定方程求解
  6. 在线安装TIDB集群
  7. C# 合并多种格式文件为PDF
  8. Python中easy_install 和 pip 的安装及使用
  9. ChromeDriver和PhantomJS配置到$PATH
  10. 中国省市区列表MySQLl数据库脚本
  11. 【编程须知】同样的代码linux与windows的运行结果不同
  12. 客房管理系统前台代码html,客房管理系统|客房软件|PMS系统|酒店管理系统|酒店管理软件...
  13. 命令行LOGO在线生成网站
  14. php html转ubb,PHP HTML转UBB函数
  15. 秀和vs太田雄藏(依田纪基讲定式,欺骗感情)
  16. java计算机毕业设计HTML5“守护萌宠”网站设计与实现MyBatis+系统+LW文档+源码+调试部署
  17. 计算机专业论文结束语,毕业设计论文的结束语
  18. Windows 7 中文版命令行如何修改字符编码为UTF-8?
  19. 黑人抬棺用计算机演奏的乐谱,原神乐谱黑人抬棺怎么演奏_乐谱黑人抬棺_3DM手游...
  20. 物金妆团是长存于她心中金妆团影响她一生的两金妆团位挚友和恩师金妆团莫妮卡说她要用

热门文章

  1. Python-Pandas之两个Dataframe的差异比较
  2. pyinstaller 打包python应用为exe后 打包出现failed to execute script
  3. 我国高性能计算机发展,中国高性能计算机发展水平与趋势
  4. matlab平稳随机过程的功率谱密度,平稳随机过程的功率谱密度
  5. centos6.5搭建mysql主从_mysql 主从配置,主-》windows,从-》centos6.5
  6. java提取多行嵌套div/div内容的正则表达式_提取某一段div标签之间内容的正则表达式怎么写...
  7. 单片机8×8点阵显示简单汉字的程序_干货 | 浅析单片机制作贪吃蛇游戏
  8. linux 改变文件夹属性,技术|在Linux中用chattr和lsattr命令管理文件和目录属性
  9. linux php 如何上传webshell,linux+apache+php的一次拿webshell的心得
  10. python函数进阶小结_python之函数进阶