将代码分割开来分析:
# coding=utf-8
import linecache
import time
now = time.time() # 代码开始时间
# 前期准备,整理数据
data_keys = ('bid', 'uid', 'username', 'v_class', 'content', 'img', 'created_at', 'source', 'rt_num', 'cm_num',
'rt_uid', 'rt_username', 'rt_v_class', 'rt_content', 'rt_img', 'src_rt_num', 'src_cm_num', 'gender',
'rt_bid', 'location', 'rt_mid', 'mid', 'lat', 'lon', 'lbs_type', 'lbs_title', 'poiid', 'links', 'hashtags',
'ats', 'rt_links', 'rt_hashtags', 'rt_ats', 'v_url', 'rt_v_url')
keys = {data_keys[k]: k for k in xrange(0, len(data_keys))}
f = linecache.getlines('t.txt')
lines = [x[1:-2].split('","') for x in f]
关于import linecache
从网上查到linecache模块的作用是将文件读取到内存中,进行缓存,而不是每次都要从硬盘中读取,相比open方法快很多,是读取效率之源。
它也有他的读取文本的方式 getlines和getline
test.txt
liuhao
fighting
you can
trust you
believe in yourself
import linecache
A = linecache.getlines('test.txt') # 打开文件返回一个列表,包含文件所有行。
B = linecache.getlines('test.txt')[0:2] # 打开文件的0,1两行作为一个列表
C = linecache.getline('test.txt', 4) # 打开文件的第四行,这里面4表示第几行从1开始算起
['liuhao\n', 'fighting\n', 'you can\n', 'trust you\n', 'believe in yourself\n']
['liuhao\n', 'fighting\n']
trust you
而time.time()是返回当前时间戳(1970年后的浮点秒数)
import time
print time.time()
关于xrange()和range()
xrange()是一个类,返回的是一个xrange对象,range返回的是一个列表,使用xrange遍历每次只返回一个值,range一次计算并返回所有值,因此xrange效率比range高
x = range(0, 5)
print x
y = xrange(0, 5)
print y
print y[0]
得到:
<span style="font-family: Arial, Helvetica, sans-serif;">[0, 1, 2, 3, 4]</span>
xrange(5)
0
关于他给的答案中拆分是lines = [x[1:-1].split('","') for x in f],这里面我给x[1:-1]改成了x[1:-2],因为结尾除了‘\n’还有一个”,这样保证lines中每个数据都不带引号
另外这种构造list的方法很值得学习 后面还有users = set(line[keys[username]] for line in lines),这样就构造了一个set,将set转换成list只要一步,比如
users = list(users) 这是users就从set变成了list