其中,a=UserInfo()为类UserInfo的实例化.因为文档是gb2312编码的,上面使用了对应的解码方法。由于第一行是属性,有个函数将属性列表存入UserInfo中,即updateAttributes();后面的行则要将 属性-值 对读入一个字典中存储。p.s.Python中的字典相当于映射(map).
3.使用strip 去除不必要的字符
从上面代码中,可以看到使用str.strip(somechar)即可去除str前后的somechar字符。somechar可以是符号,也可以是正则表达式,如上:
item=item.strip()
#除去字符串前后的所有转义字符,如\t,\n等
item=item.strip(
'\"')
#除去前后的"
item=item.strip(
'\'')
item=item.strip(
'+0*')
#除去前后的+00...00,*表示0的个数可以任意多,也可以没有
4.re.match匹配字符串
函数语法:
re.match(pattern, string, flags=0)
函数参数说明:
参数 描述
pattern 匹配的正则表达式
string 要匹配的字符串。
flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。
若匹配成功re.match方法返回一个匹配的对象,否则返回None。`
>>> s=
'2015-09-18'
>>> matchObj=re.match(
r'\d{4}-\d{2}-\d{2}',s, flags=
0)
>>> print matchObj
<_sre.SRE_Match object at
0x7f3525480f38>
5.使用time.strptime提取字符串转化为时间对象
在time模块中,time.strptime(str,format)可以把str按照format格式转化为时间对象,format中的常用格式有:
%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)
此外,还需要使用re模块,用正则表达式,对字符串进行匹配,看是否是一般时间的格式,如YYYY/MM/DD H:M:S, YYYY-MM-DD等
在上面的代码中,函数catchTime就是判断item是否为时间对象,是的话转化为时间对象。代码如下:
import time
import re
def catchTime(item):
# check if it's time
matchObj=re.match(
r'\d{4}-\d{2}-\d{2}',item, flags=
0)
if matchObj!=
None :
item =time.strptime(item,
'%Y-%m-%d')
#print "returned time: %s " %item
return item
else:
matchObj=re.match(
r'\d{4}/\d{2}/\d{2}\s\d+:\d+:\d+',item,flags=
0 )
if matchObj!=
None :
item =time.strptime(item,
'%Y/%m/%d %H:%M:%S')
#print "returned time: %s " %item
return item
完整代码:
import collections
import time
import re
class UserInfo(object):
'Class to restore UserInformation'
def __init__ (self):
self.attrilist=collections.OrderedDict()
# ordered
self.__attributes=[]
def updateAttributes(self,attributes):
self.__attributes=attributes
def updatePairs(self,values):
for i
in range(len(values)):
self.attrilist[self.__attributes[i]]=values[i]
def catchTime(item):
# check if it's time
matchObj=re.match(
r'\d{4}-\d{2}-\d{2}',item, flags=
0)
if matchObj!=
None :
item =time.strptime(item,
'%Y-%m-%d')
#print "returned time: %s " %item
return item
else:
matchObj=re.match(
r'\d{4}/\d{2}/\d{2}\s\d+:\d+:\d+',item,flags=
0 )
if matchObj!=
None :
item =time.strptime(item,
'%Y/%m/%d %H:%M:%S')
#print "returned time: %s " %item
return item
def ObjectGenerator(maxlinenum):
filename=
'/home/thinkit/Documents/usr_info/USER.csv'
attributes=[]
linenum=
1
a=UserInfo()
file=open(filename)
while linenum < maxlinenum:
values=[]
line=str.decode(file.readline(),
'gb2312')
#linecache.getline(filename, linenum,'gb2312')
if line==
'':
print'reading fail! Please check filename!'
break
str_list=line.split(
',')
for item
in str_list:
item=item.strip()
item=item.strip(
'\"')
item=item.strip(
'\'')
item=item.strip(
'+0*')
item=catchTime(item)
if linenum==
1:
attributes.append(item)
else:
values.append(item)
if linenum==
1:
a.updateAttributes(attributes)
else:
a.updatePairs(values)
yield a.attrilist
#change to ' a ' to use
linenum = linenum +
1
if __name__ ==
'__main__':
for n
in ObjectGenerator(
10):
print n
#输出字典,看是否正确
Ubuntu 14.04安装Python 3.3.5
CentOS上源码安装Python3.4
《Python核心编程 第二版》.(Wesley J. Chun ).[高清PDF中文版]
《Python开发技术详解》.( 周伟,宗杰).[高清PDF扫描版+随书视频+代码]
Python脚本获取Linux系统信息
在Ubuntu下用Python搭建桌面算法交易研究环境
Python 语言的发展简史