记一次捉急的文本处理
2014-02-19 by Brant Xiong前言
今天要需要统计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.嗯,之前喵大说要看的...喵的,还没看完!最近抽时间看完!