python学习笔记—

最近写一些查询,对比,管理数据库的python脚本,以下是一些用到的知识点,还在继续补充中

1.python中的缩进问题:

  • 初学python必看的部分,有过c/c++基础感觉很容易懂,好处是规范了代码。
  • 用vim编写注意空格和tab的使用,缩进尽量用tab,推荐使用一款编辑器sublime text来编写比较好用
  • vim中查看格式的命令为':set list',可以用‘T%s/四个空格/tab/‘来替换每行首次出现的四个空格为tab键。
  • 写好缩进就没什么问题了,刚开始总是各种错误,最容易的错误就是空格和tab混用,尽量用一种看习惯。
2.python变量的生命周期:

  1. 写python的时候想用全局变量是总是弄不明白
  2. 在python中全局定义:
  • 在模块内、在所有函数外面、在class外面,这就是全局变量。
  • 局部变量:在函数内、在class的方法内(未加self修饰的),这就是局部变量
  • 静态变量:在class内的,但不在class的方法内的,这就是静态变量
  •  实例变量:在class的方法内的,用self修饰的变量,这就是实例变量

python能够改变变量作用域的代码段是def、class、lamda,与c++不同的是if else for while try except中的都是全局变量

3.python 中字符串的

  • Python中的分割字符串split()函数的用法:

按照某个字符或字符串分割

str.split('\t')
需要注意:

如果是字符串为Str=‘||||||’

print Str.split('|||')

输出:['','','']

所以写分割字符串要看字符串里存在不存在连续的分割符,同理制作分割符分割的字符串尽量选一个字符比较常见的是'\t'制表符

  • 对字符串的分割函数,用法:list=str.split('str1')意思是把str以str1分割后放在list里面
  • .join()函数
  • strip()函数
    str.strip()
    默认去掉末尾的'\n'换行,也可以加入参数
    str.strip('s')
    去掉末尾的's'
    常常用来处理按行读取文件处理字符
    注意:当字符串里面只有一个字符比如说'\n',此时调用strip()则去不掉


  • replace()函数
  • python lower()方法

    str.lower()
    返回结果:将str变小写

4.python多进程multiprocessing中进程池Pool类的使用:


5.python文件处理:

  • http://blog.csdn.net/lsq2902101015/article/details/51305825
  • python读写文件,读写数据库
  • http://blog.csdn.net/muwinter/article/details/77196261
  • https://www.cnblogs.com/dwtt/p/7772639.html
  • https://zhidao.baidu.com/question/1369792116921088619.html

6.字典操作:

  • 融合两个字典

dictMerged=dict(dict1)
dictMerged.update(dict2)

或者

dictMerged2=dict(dict1, **dict2)
**如果待融合字典中有字典的就不灵了
  • 删除字典key:

del dic[key]

  • get函数:
dict.get(key, default=None)

key:dict的键值

default:如果键值不存在,key的默认值


7.list操作:

  • (1)合并连个list:

>>> L1 = [1, 2, 3, 4, 5]
>>> L2 = [20, 30, 40]
>>> L1.extend(L2)
>>> L1
[1, 2, 3, 4, 5, 20, 30, 40]
切片:贴片更灵活,随意插。
>>> L1 = [1, 2, 3, 4, 5]
>>> L2 = [20, 30, 40]
>>> L1[len(L1):len(L1)] = L2
>>> 
>>> L1
[1, 2, 3, 4, 5, 20, 30, 40]

  • (2)list关于排序:

方法1:sort()

方法2:sorted()

sort用法:

L=[1,3,2,5,4]
L.sort()
print L

输出[1,2,3,4,5],sort会改变原来的list
与sort 不同的是sorted会生成一个list
sorted用法:
首先有下面参数:
iterable:是可迭代类型;
cmp:用于比较的函数,比较什么由key决定;
key:用列表元素的某个属性或函数进行作为关键字,有默认值,迭代集合中的一项;
reverse:排序规则. reverse = True  降序 或者 reverse = False 升序,有默认值。
返回值:是一个经过排序的可迭代类型,与iterable一样。
basic

>>> print sorted([5, 2, 3, 1, 4]) [1, 2, 3, 4, 5] >>> L = [5, 2, 3, 1, 4] >>> L.sort() >>> print L [1, 2, 3, 4, 5]
cmp

>>>L = [('b',2),('a',1),('c',3),('d',4)] >>>print sorted(L, cmp=lambda x,y:cmp(x[1],y[1])) [('a', 1), ('b', 2), ('c', 3), ('d', 4)]key

>>>L = [('b',2),('a',1),('c',3),('d',4)]
>>>print sorted(L, key=lambda x:x[1]))
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
reverse
>>> print sorted([5, 2, 3, 1, 4], reverse=True)
[5, 4, 3, 2, 1]
>>> print sorted([5, 2, 3, 1, 4], reverse=False)
[1, 2, 3, 4, 5]

key比cmp快

8.python不允许程序员选择采用传值还是传引用。Python参数传递采用的肯定是“传对象引用”的方式。这种方式相当于传值和传引用的一种综合。如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值--相当于通过“传引用”来传递对象。如果函数收到的是一个不可变对象(比如数字、字符或者元组)的引用,就不能直接修改原始对象--相当于通过“传值'来传递对象。

*9.python的编码问题:

10.json的用法:

11.更改数据库是要用到conn.commit().

12.redis:

13.python中导入包要添加包的路径:sys.path.append('/search/yuanbo/new_merge_hotel_lk_no_city') 

可以将导入模块打印出检查一下:

import config
print config
exit(0)

14.读写数据库要处理好每个字段的信息:

处理的方式要看对端的处理:这里一个很好的例子

hotel_static_dic={}
for sidkey in s_sid_set:
	if rds.exists('base_'+sidkey):
		adic=json.loads(rds.get('base_'+sidkey))
		for key in adic:
			if adic[key]==None:
				adic[key]=''
			elif isinstance(adic[key],unicode):
				adic[key]=adic[key].encode('utf-8')
			elif isinstance(adic[key],int) or isinstance(adic[key],long)\
					or isinstance(adic[key],float):
				adic[key]=str(adic[key])
			else:
				adic[key]=''
		
		for key in adic:
			adic[key]=adic[key].strip().replace('\t',' ').replace('\n','')
		
		if adic['name']=='' or adic['name'].lower() == 'null':
			adic['name'] = adic['name_en']

		if adic['name_en']=='' or adic['name_en'].lower() == 'null':
			adic['name_en'] = adic['name']

		try:
			adic['grade'] = float(adic['grade_str'])
		except Exception,e:
			adic['grade'] = -1
		del adic['grade_str']

		try:
			adic['star'] = float(adic['star_str'])
			if adic['star']<0:
				adic['star']=-1.0
			elif adic['star']>5:
				adic['star']=5.0
		except Exception,e:
			adic['star']=-1
		del adic['star_str']

		try:
			adic['review_num']=int(float(adic['review_num_str']))
		except Exception,e:
			adic['review_num']=-1
		del adic['review_num_str']

		hotel_static_dic[sidkey]=adic

15.python中的日期以及时间

  • 在Python中,通常有这几种方式来表示时间:1)时间戳 2)格式化的时间字符串 3)元组(struct_time)共九个元素。由于Python的time模块实现主要调用C库,所以各个平台可能有所不同。
  • UTC(Coordinated Universal Time,世界协调时)亦即格林威治天文时间,世界标准时间。在中国为UTC+8。DST(Daylight Saving Time)即夏令时。
  • 时间戳(timestamp)的方式:通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。返回时间戳方式的函数主要有time(),clock()等。
  • 元组(struct_time)方式:struct_time元组共有9个元素,返回struct_time的函数主要有gmtime(),localtime(),strptime()。下面列出这种方式元组中的几个元素:

  • import time
    1. time.time(): 返回当前时间戳
    2. time.localtime():将时间戳转换为当前时区的struct_time
    3. time.mktime(t):将一个struct_time转化为时间戳
      >>> time.mktime(time.localtime())
      1304576839.0


    4. time.sleep(secs):线程推迟指定的时间运行。单位为秒
    5. time.asctime([t]):把一个表示时间的元组或者struct_time表示为这种形式:'Sun Jun 20 23:21:05 1993'。如果没有参数,将会将time.localtime()作为参数传入
    6. time.strftime(format[, t]):把一个代表时间的元组或者struct_time(如由time.localtime()和time.gmtime()返回)转化为格式化的时间字符串。如果t未指定,将传入time.localtime()。如果元组中任何一个元素越界,ValueError的错误将会被抛出
      #!/usr/bin/python
      import time
      
      t = (2009, 2, 17, 17, 3, 38, 1, 48, 0)
      t = time.mktime(t)
      print time.strftime("%b %d %Y %H:%M:%S", time.gmtime(t))

    7. time.strptime(string[, format]):把一个格式化时间字符串转化为struct_time。实际上它和strftime()是逆操作
          s1='20120116'
          s2='20120216';
          a=time.strptime(s1,'%Y%m%d');
          b=time.strptime(s2,'%Y%m%d');
          a_datetime=datetime.datetime(*a[:3]);
          b_datetime=datetime.datetime(*b[:3]);
          print b_datetime-a_datetime;

    8. time.ctime([secs]):把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。如果参数未给或者为None的时候,将会默认time.time()为参数。它的作用相当于time.asctime(time.localtime(secs))
      >>> time.ctime()
      'Thu May 5 14:58:09 2011'
      >>> time.ctime(time.time())
      'Thu May 5 14:58:39 2011'
      >>> time.ctime(1304579615)
      'Thu May 5 15:13:35 2011'


    9. time.gmtime([secs]):和localtime()方法类似,gmtime()方法是将一个时间戳转换为UTC时区(0时区)的struct_time。
      >>>time.gmtime()
      time.struct_time(tm_year=2011, tm_mon=5, tm_mday=5, tm_hour=6, tm_min=19, tm_sec=48, tm_wday=3, tm_yday=125, tm_isdst=0)
      
      注意:这里的tm_wday=3表示的是周几,但是要在这个返回值的基础上往后推一天,即表示的是周四,而不是周三。

17.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值