zoukankan      html  css  js  c++  java
  • Python 条件表达式

    问题:获得目录中的 .fna 后缀的文件路径

    • 通过 makeblastdb 能获得用于 BLAST 的数据库文件,这些文件包括原始数据 .fna,和几个在原名基础上增加后缀为名字的文件,例如 .fna.nsq
    • Blast 的时候需要指定的是 .fna文件,而不是其他的那些。因此需要自动读取数据库文件夹中的不带后缀的文件。
    • 如果做的是蛋白质的数据库,需要的是 .faa 的文件。

    解决

    • 直接用 in 不能筛选出 .fna结尾 的名字。需要使用正则表达式。
    import os
    import re
    mask = re.compile('.+fna$') # $说明从后开始匹配
    
    # 最好先看一下当前路径是什么
    os. getcwd()
    
    # 获得文件夹里面所以文件名
    file_names= os.listdir()
    
    # 或者随便用个例子
    file_names = ['1.fna', '1.fna.nsq', '1.fna.nsi',]
    
    # 方法1 for循环,遍历每个文件名,返回fna结尾的文件(事先知道只有一个)
    
    for db in file_names:
        if mask.match(db):
            path = db
    path
    
    # 方法2 方法1用条件表达式写出来
    path = [db for db in file_names if mask.match(db)] # 注意[ ]不能少
    path
    
    # 方法3 filter 函数
    path = list(filter(mask.match, file_names))[0]
    path
    
    
    # 以上三个path都会是1.fna
    # 把这个和当前的目录组合起来就是数据库所在的路径
    print(os.path.join(os.getcwd(),path))
    

    说明

    搜问题的时候看到了第二种写法,觉得挺有趣的,就稍微看了下。

    如何理解conditional expression

    a, b, c = 1, 2, 3
    
    # 1.常规
    
    if a>b:
        c = a
    else:
        c = b
    
    # 2.表达式
    c = a if a>b else b # 先执行中间的if,如果返回True,就是左边,False是右边。
    
    # 3.二维列表
    c = [b,a][a>b] #实际是[b,a][False],因为False被转换为0,所以是[1,2][0],也就是[1]
                          # False返回第一个,True 返回第一个。
    
    # 4
    c = (a>b and [a] or [b])[0]
    # 这个比较好玩,False and [1] or [2],因为and的优先级高于or,先算and
    # False和[1] and之后还是False,和[2]or之后却成了[2]
    # True 和[1] and之后是[1],[1]和[2]or结果是[1]
    # 也就是False和True在和别人做boolean运算的时候,根据and还是or,F和T在前在后有不一样的数据转换规则。
    

    参考

    Python关于条件表达式的说明 PEP308



    ----ฅ(*ΦωΦ)ฅ---- cognata ad sidera tendit...
  • 相关阅读:
    python编写爬虫脚本并实现APScheduler调度
    python实践设计模式(一)概述和工厂模式
    90、java ftp 读取文件
    91、mysql批量删除表
    92、kkfile打印当前页
    CSS3实践之路(四):文本特效
    CSS3实践之路(六):CSS3的过渡效果(transition)与动画(animation)
    CSS3实践之路(二):盒子模型(box Model)和边框(border)
    CSS3实践之路(三):颜色(Color)和背景(Backgroud)
    谈谈javascript中的定时器
  • 原文地址:https://www.cnblogs.com/Xeonilian/p/python-conditional-expression.html
Copyright © 2011-2022 走看看