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
ringzero
V2EX  ›  Python

咨询: Python 有类似 PHP 的 filter_var 函数或者第三库吗?

  •  
  •   ringzero · 2017-02-12 14:06:00 +08:00 · 2292 次点击
    这是一个创建于 2842 天前的主题,其中的信息可能已经有所发展或是发生改变。

    想实现一个参数聚类的方法, 分析出参数都是什么数据类型(int, string, float, double),
    Python 内置提供的功能有限,而且暂时不考虑直接采用正则。

    最终想要的结果,给出参数,得出数据类型路径

    c = '/buy/12333/price/2.00' 
    structure = '/str/int/str/float' 
    

    python 只支持最基础的数据类型,现在实现是通过硬编码一个一个的字符带入到 curses.ascii 内置的函数做检测,感觉有点笨,不知道外面有没有已经造好的第三方库。

    a = '3.14'
    print a.isalpha()
    print a.isdigit()
    print a.isalnum()
    b = '/admin/login.php'
    c = '/read/12333/'
    e = '/t/id/12333/'
    

    isInt(), isFloat(), 不存在。。。

    <?php
    $var = filter_var('0755', FILTER_VALIDATE_INT, $options);
    var_dump(filter_var('[email protected]', FILTER_VALIDATE_EMAIL));
    var_dump(filter_var('http://example.com', FILTER_VALIDATE_URL, FILTER_FLAG_PATH_REQUIRED));
    
    9 条回复    2017-02-12 22:49:01 +08:00
    ringzero
        1
    ringzero  
    OP
       2017-02-12 14:08:19 +08:00
    最终想要的结果,给出参数,得出数据类型路径

    ```python
    c = '/buy/12333/price/2.00'
    structure = '/str/int/str/float'
    ```
    hwsdien
        2
    hwsdien  
       2017-02-12 14:14:48 +08:00
    isinstance
    ringzero
        3
    ringzero  
    OP
       2017-02-12 14:17:56 +08:00
    @hwsdien
    恩,尝试过这种方法, 要强转之后,才能判断,默认传过去的是 str 类型

    a = '3.14'
    print isinstance(a, float)
    False
    print isinstance(float(a), float)
    True
    ringzero
        4
    ringzero  
    OP
       2017-02-12 14:25:28 +08:00
    先把 str 强转成精度高的 float 类型,做 try catch 捕捉住 ValueError 错误
    然后用 float.is_integer()来判断数字是否是整形,解决的办法还是笨。
    wmttom
        5
    wmttom  
       2017-02-12 15:05:53 +08:00
    有一个库叫 marshmallow ,在前段时间做 swagger 文档自动生成代码的时候使用过,用作验证类型还是很好使的,自定义空间也很大。
    congeec
        6
    congeec  
       2017-02-12 15:36:15 +08:00 via iPad   ❤️ 1
    TJT
        7
    TJT  
       2017-02-12 22:46:24 +08:00
    TJT
        8
    TJT  
       2017-02-12 22:46:40 +08:00
    TJT
        9
    TJT  
       2017-02-12 22:49:01 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3023 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 00:42 · PVG 08:42 · LAX 16:42 · JFK 19:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.