V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
zckun
V2EX  ›  Python

Python 对于配置进行排列组合

  •  
  •   zckun · 2020-09-12 15:14:15 +08:00 · 1456 次点击
    这是一个创建于 1526 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在造轮子之前问下有没有老哥知道这种或者类似的对于 xml 或其他配置的排列组合的库,谢谢

        <a val="1|2">
            <b val="3|4"/>
        </a>
        
        <!-- -->
    
        <a val="1">
            <b val="3"/>
        </a>
        <a val="1">
            <b val="4"/>
        </a>
    
        <a val="1">
            <b val="4"/>
        </a>
        <a val="1">
            <b val="3"/>
        </a>
    
        <a val="2">
            <b val="3"/>
        </a>
        <a val="2">
            <b val="4"/>
        </a>
    
        <a val="2">
            <b val="4"/>
        </a>
        <a val="2">
            <b val="3"/>
        </a>
    
    5 条回复    2020-09-12 15:55:57 +08:00
    imn1
        1
    imn1  
       2020-09-12 15:32:50 +08:00
    目的是?统计还是转换格式

    转换格式搜 xml2csv,xml2dict,xml2json……等等
    直接用 xml 统计的没留意

    如果我做的话,这么有规律的格式,正则几行就可以 parse 并统计了
    zckun
        2
    zckun  
    OP
       2020-09-12 15:42:54 +08:00
    @imn1 不是,目的是将第一个 tag <a val="1|2"><b val="3|4"/></a> 按排列组合生成注释下面的 tags
    oahebky
        3
    oahebky  
       2020-09-12 15:47:00 +08:00
    有不难,本来就有 xml 的库。

    就是 读取 + 排列组合算法 + 生成。

    排列组合算法到 leetcode 上找两道题刷一下,就能直接用。

    如果有我没有 cover 到的地方可以说说看。
    imn1
        4
    imn1  
       2020-09-12 15:53:37 +08:00
    原来是生成,不是读取
    没有轮子,但自己写不难

    itertools.product 生成 value 的组合,然后逐行套到 xml 模板就是了

    我爬虫有个函数就是这样,一个页码的 range+几个搜索条件,生成所有可能的 link 去爬
    zckun
        5
    zckun  
    OP
       2020-09-12 15:55:57 +08:00
    @imn1 刚刚从 stackoverflow 看到了,不过还是谢谢老哥
    params = {
    "a": [1,2],
    "b": [3,4],
    }
    data = '<a val="{a}"><b val="{b}"/></a>'
    for val in itertools.product(*params.values()):
    ps = dict(zip(params.keys(), val))
    d = data.format(a=ps['a'], b=ps['b'])
    print(d)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2869 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 08:33 · PVG 16:33 · LAX 00:33 · JFK 03:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.