前言

今天要需要统计10w个query的页面构成,由于输入文件格式不标准,url编码不统一等各种问题,整个统计过程相当纠结...下面将其中的一些点记录下来,供以后参考

异常文件处理

删除文件最后的异常行:

for file in `ls`; do line=`tail -1 $file`; if [ "$line" != "}," ]; then sed -i '$d' $file;fi;done

删除目录下的空文件:

find -maxdepth 1 -type f -empty -print0 | xargs -0 rm -f

python处理url

从url中获取domain name:

1
2
3
4
5
6
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from urlparse  import urlparse, parse_qs

def get_domain_from_url(url):
    return '{uri.scheme}://{uri.netloc}'.format(uri=urlparse(url))

从url中获取参数,如本例中的wd字段,其中对编码的处理还不够完善,需继续改进~

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from urlparse  import urlparse, parse_qs

def get_query_from_url(url):
    try:
        query_url = urllib.unquote(url).decode('utf8')
    except UnicodeDecodeError:
         try:
             query_url = urllib.unquote(url).decode('gbk')
         except UnicodeDecodeError:
             return "Unknown Encoding"
    try:
         wd = parse_qs(urlparse(query_url).query)['wd'][0].encode('utf8')
     except KeyError:
         wd = "Unknown Key"
    return wd

其他技巧

python计算平均数:

def average(values):
    return float('%.2f' % (sum(values, 0.0) / len(values)))

python找出list中重复的值:

def find_dup_value_from_list(inlist):
    return [x for x, y in collections.Counter(inlist).items() if y > 1]

python匹配出日志中key=value类型的值:

def find_value_from_string(string, key):
    regex = '\s*' + key + '=(\w+)\s*' 
    return re.findall(regex, string)

总结

python的数据结构还需要系统的看下,不然好多基础问题还得Google..太影响效率了。囧o(╯□╰)o..

嗯,准备系统的看下官方文档:http://docs.python.org/2/tutorial/index.html.嗯,之前喵大说要看的...喵的,还没看完!最近抽时间看完!


Follow me on GitHub