python - python 在 bash 中可以像这样吗?

标签 python shell path glob expansion

Python可以通过这样的简写语法生成具有多个子路径的路径吗?

vars=project/{DEBIAN,usr/{bin,usr/{applications,icons,share}},computer}

最佳答案

通常我会建议使用类似的东西

def extend(base, *others):
    [base + o for o in others] if others else [base]

然后做

 extend("project", "/debian", *extend("/usr", *(extend("/bin") + extend("/usr", "/applications", "/icons", "/share"))))

。但由于您更喜欢解析字符串,我尝试提供一种替代方案:

def commasplit(s):
    start = 0
    level = 0
    for i, c in enumerate(s):
        if c == '{':
            level += 1
        elif c == '}':
            level -= 1
        elif c == ',' and level == 0:
            yield s[start:i]
            start = i+1
    yield s[start:]

def split(s):
    import re
    found = False
    for m in re.finditer("(\{.*\})",s):
        found = True
        for p in commasplit(s[m.start() + 1:m.end() - 1]):
            for i in split(p):
                yield s[:m.start()] + i + s[m.end():]
    if not found:
        yield s

cs = "a,b,c,{d,e,f},g"
print list(commasplit(cs)) # -> seems to work

s = "project/{DEBIAN,usr/{bin,usr/{applications,icons,share}},computer}"
print s
for n, i in enumerate(split(s)): print n, i # ->  as well.

关于python - python 在 bash 中可以像这样吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12993497/

相关文章:

java - Java 路径中的星号

python - Pandas 分组、过滤和绘图

python - 为什么在 xvfb 下显示的文字更大?

确定 json 对象是否包含特定值的 Pythonic 方法?

r - 根据返回的结果和先前正则表达式的规则创建新正则表达式|索引正则表达式并查看正则表达式如何与子字符串匹配

linux - Shell 命令在目录模式中查找文件

android - 如何从 InputStream 而不是 File 获取 Exif 数据?

Python 和 openpyxl - 更改列宽以适应?

bash - 在 shell 脚本中解压缩文件时出错。 - 需要PK兼容。 v5.1(可以做v4.6)

javascript - 如何在某些路径上而不是其他路径上在 ExpressJS 中提供静态文件