当我用pylint运行以下代码块时,我没有错误.
import json
for key, value in json.loads('{"foo":"bar"}').items():
print(key, value)
Run Code Online (Sandbox Code Playgroud)
当切换出json有simplejson,然后运行pylint的,我得到的错误:
Instance of 'bool' has no 'items' member (but some types could not be inferred) (maybe-no-member)
Run Code Online (Sandbox Code Playgroud)
从比较astroidsimplejson.loads和json.loads的推测结果看来,即使json和simplejson都是用c_speedups编译的,astroid 在处理库时会选择scan_once函数的python版本simplejson,而c处理json库时的版本.
import astroid.builder
builder = astroid.builder.AstroidBuilder()
ast = builder.string_build("""
import simplejson
import json
x = json.loads('"test"')
y = simplejson.loads('"test"')
""")
json_assignment, simplejson_assignment = list(ast.get_children())[2:]
print "json:", list(json_assignment.get_children())[-1].infered()
print "simplejson:", list(simplejson_assignment.get_children())[-1].infered()
Run Code Online (Sandbox Code Playgroud)
运行上面的代码输出:
json: [YES]
simplejson: [YES, <Const(NoneType) l.97 [simplejson.scanner] at Ox102720290>, <Const(bool) …Run Code Online (Sandbox Code Playgroud) 总结:有没有办法从文件中获取唯一的行数和出现次数比使用sort | uniq -c | sort -n?
详细信息:我经常sort | uniq -c | sort -n在进行日志分析时获取一般趋势,了解哪些日志条目显示最多/最少等.这大部分时间都有效 - 除非我处理的是一个非常大的日志文件大量重复(在这种情况下sort | uniq -c最终需要很长时间).
示例:我现在面临的具体情况是从"未参数化"的mysql bin日志中获取趋势,以找出哪些查询运行最多.对于一个百万条目的文件,我通过grep/sed组合来删除参数 - 产生大约150个独特的行 - 我花了大约3秒的grepping和sedding,以及大约15s的排序/ uniq'ing.
目前,我已经找到了一个简单的c ++程序来维护一个<line,count>的映射 - 它可以在不到一秒的时间内完成工作 - 但我想知道现有的实用程序是否已经存在.