Python语言的12个基础知识点小结


Posted in Python onJuly 10, 2014

python编程中常用的12种基础知识总结:正则表达式替换,遍历目录方法,列表按列排序、去重,字典排序,字典、列表、字符串互转,时间对象操作,命令行参数解析(getopt),print 格式化输出,进制转换,Python调用系统命令或者脚本,Python 读写文件。

1、正则表达式替换

目标: 将字符串line中的 overview.gif 替换成其他字符串

>>> line = '<IMG ALIGN="middle" SRC=\'#\'" />'

>>> mo=re.compile(r'(?<=SRC=)"([\w+\.]+)"',re.I) 
>>> mo.sub(r'"\1****"',line)

'<IMG ALIGN="middle" SRC=\'#\'" /span>
>>> mo.sub(r'replace_str_\1',line)

'<IMG ALIGN="middle" replace_str_overview.gif BORDER="0" ALT="">'< /span>
>>> mo.sub(r'"testetstset"',line)

'<IMG ALIGN="middle" SRC=\'#\'" /span>

注意: 其中 \1 是匹配到的数据,可以通过这样的方式直接引用

2、遍历目录方法

在某些时候,我们需要遍历某个目录找出特定的文件列表,可以通过os.walk方法来遍历,非常方便

import os

fileList = []

rootdir = "/data"

for root, subFolders, files in os.walk(rootdir):

if '.svn' in subFolders: subFolders.remove('.svn')  # 排除特定目录

for file in files:

  if file.find(".t2t") != -1:# 查找特定扩展名的文件

      file_dir_path = os.path.join(root,file)

      fileList.append(file_dir_path) 
print fileList

3、列表按列排序(list sort)

如果列表的每个元素都是一个元组(tuple),我们要根据元组的某列来排序的化,可参考如下方法
下面例子我们是根据元组的第2列和第3列数据来排序的,而且是倒序(reverse=True)

>>> a = [('2011-03-17', '2.26', 6429600, '0.0'), ('2011-03-16', '2.26', 12036900, '-3.0'),

 ('2011-03-15', '2.33', 15615500,'-19.1')]

>>> print a[0][0]

2011-03-17

>>> b = sorted(a, key=lambda result: result[1],reverse=True)

>>> print b

[('2011-03-15', '2.33', 15615500, '-19.1'), ('2011-03-17', '2.26', 6429600, '0.0'),

('2011-03-16', '2.26', 12036900, '-3.0')]

>>> c = sorted(a, key=lambda result: result[2],reverse=True)

>>> print c

[('2011-03-15', '2.33', 15615500, '-19.1'), ('2011-03-16', '2.26', 12036900, '-3.0'),

('2011-03-17', '2.26', 6429600, '0.0')]

4、列表去重(list uniq)

有时候需要将list中重复的元素删除,就要使用如下方法

>>> lst= [(1,'sss'),(2,'fsdf'),(1,'sss'),(3,'fd')]

>>> set(lst)

set([(2, 'fsdf'), (3, 'fd'), (1, 'sss')])

>>>

>>> lst = [1, 1, 3, 4, 4, 5, 6, 7, 6]

>>> set(lst)

set([1, 3, 4, 5, 6, 7])

5、字典排序(dict sort)

一般来说,我们都是根据字典的key来进行排序,但是我们如果想根据字典的value值来排序,就使用如下方法

>>> from operator import itemgetter

>>> aa = {"a":"1","sss":"2","ffdf":'5',"ffff2":'3'}

>>> sort_aa = sorted(aa.items(),key=itemgetter(1))

>>> sort_aa

[('a', '1'), ('sss', '2'), ('ffff2', '3'), ('ffdf', '5')]

6、字典,列表,字符串互转

以下是生成数据库连接字符串,从字典转换到字符串

>>> params = {"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"secret"}

>>> ["%s=%s" % (k, v) for k, v in params.items()]

['server=mpilgrim', 'uid=sa', 'database=master', 'pwd=secret']

>>> ";".join(["%s=%s" % (k, v) for k, v in params.items()])

'server=mpilgrim;uid=sa;database=master;pwd=secret'

下面的例子 是将字符串转化为字典
>>> a = 'server=mpilgrim;uid=sa;database=master;pwd=secret'

>>> aa = {}

>>> for i in a.split(';'):aa[i.split('=',1)[0]] = i.split('=',1)[1]

...

>>> aa

{'pwd': 'secret', 'database': 'master', 'uid': 'sa', 'server': 'mpilgrim'}

7、时间对象操作

将时间对象转换成字符串

>>> import datetime

>>> datetime.datetime.now().strftime("%Y-%m-%d %H:%M")

  '2011-01-20 14:05'

时间大小比较
>>> import time

>>> t1 = time.strptime('2011-01-20 14:05',"%Y-%m-%d %H:%M")

>>> t2 = time.strptime('2011-01-20 16:05',"%Y-%m-%d %H:%M")

>>> t1 > t2

  False

>>> t1 < t2

  True

时间差值计算,计算8小时前的时间
>>> datetime.datetime.now().strftime("%Y-%m-%d %H:%M")

  '2011-01-20 15:02'

>>> (datetime.datetime.now() - datetime.timedelta(hours=8)).strftime("%Y-%m-%d %H:%M")

  '2011-01-20 07:03'

将字符串转换成时间对象
>>> endtime=datetime.datetime.strptime('20100701',"%Y%m%d")

>>> type(endtime)

  <type 'datetime.datetime'>

>>> print endtime

  2010-07-01 00:00:00

将从 1970-01-01 00:00:00 UTC 到现在的秒数,格式化输出  
>>> import time

>>> a = 1302153828

>>> time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(a))

  '2011-04-07 13:23:48'

8、命令行参数解析(getopt)

通常在编写一些日运维脚本时,需要根据不同的条件,输入不同的命令行选项来实现不同的功能
在Python中提供了getopt模块很好的实现了命令行参数的解析,下面距离说明。请看如下程序:

#!/usr/bin/env python

# -*- coding: utf-8 -*-

import sys,os,getopt

def usage():

print '''''

Usage: analyse_stock.py [options...]

Options:

-e : Exchange Name

-c : User-Defined Category Name

-f : Read stock info from file and save to db

-d : delete from db by stock code

-n : stock name

-s : stock code

-h : this help info

test.py -s haha -n "HA Ha"

'''
try:

opts, args = getopt.getopt(sys.argv[1:],'he:c:f:d:n:s:')

except getopt.GetoptError:

usage()

sys.exit()

if len(opts) == 0:

usage()

sys.exit() 
for opt, arg in opts:

if opt in ('-h', '--help'):

  usage()

  sys.exit()

elif opt == '-d':

  print "del stock %s" % arg

elif opt == '-f':

  print "read file %s" % arg

elif opt == '-c':

  print "user-defined %s " % arg

elif opt == '-e':

  print "Exchange Name %s" % arg

elif opt == '-s':

  print "Stock code %s" % arg

elif opt == '-n':

  print "Stock name %s" % arg 
sys.exit()

9、print 格式化输出

9.1、格式化输出字符串
截取字符串输出,下面例子将只输出字符串的前3个字母

>>> str="abcdefg"

>>> print "%.3s" % str

  abc

按固定宽度输出,不足使用空格补全,下面例子输出宽度为10
>>> str="abcdefg"

>>> print "%10s" % str

     abcdefg

截取字符串,按照固定宽度输出
>>> str="abcdefg"

>>> print "%10.3s" % str

         abc

浮点类型数据位数保留
>>> import fpformat

>>> a= 0.0030000000005

>>> b=fpformat.fix(a,6)

>>> print b

  0.003000

对浮点数四舍五入,主要使用到round函数
>>> from decimal import *

>>> a ="2.26"

>>> b ="2.29"

>>> c = Decimal(a) - Decimal(b)

>>> print c

  -0.03

>>> c / Decimal(a) * 100

  Decimal('-1.327433628318584070796460177')

>>> Decimal(str(round(c / Decimal(a) * 100, 2)))

  Decimal('-1.33')

9.2、进制转换

有些时候需要作不同进制转换,可以参考下面的例子(%x 十六进制,%d 十进制,%o 十进制)

>>> num = 10

>>> print "Hex = %x,Dec = %d,Oct = %o" %(num,num,num)

  Hex = a,Dec = 10,Oct = 12

10、Python调用系统命令或者脚本

使用 os.system() 调用系统命令 , 程序中无法获得到输出和返回值

>>> import os

>>> os.system('ls -l /proc/cpuinfo')

>>> os.system("ls -l /proc/cpuinfo")

  -r--r--r-- 1 root root 0  3月 29 16:53 /proc/cpuinfo

  0

使用 os.popen() 调用系统命令, 程序中可以获得命令输出,但是不能得到执行的返回值
>>> out = os.popen("ls -l /proc/cpuinfo")

>>> print out.read()

  -r--r--r-- 1 root root 0  3月 29 16:59 /proc/cpuinfo 

使用 commands.getstatusoutput() 调用系统命令, 程序中可以获得命令输出和执行的返回值
>>> import commands

>>> commands.getstatusoutput('ls /bin/ls')

  (0, '/bin/ls')

11、Python 捕获用户 Ctrl+C ,Ctrl+D 事件

有些时候,需要在程序中捕获用户键盘事件,比如ctrl+c退出,这样可以更好的安全退出程序

try:

    do_some_func()

except KeyboardInterrupt:

    print "User Press Ctrl+C,Exit"

except EOFError:

    print "User Press Ctrl+D,Exit"

12、Python 读写文件

一次性读入文件到列表,速度较快,适用文件比较小的情况下

track_file = "track_stock.conf"

fd = open(track_file)

content_list = fd.readlines()

fd.close()

for line in content_list:

    print line 

逐行读入,速度较慢,适用没有足够内存读取整个文件(文件太大)
fd = open(file_path)

fd.seek(0)

title = fd.readline()

keyword = fd.readline()

uuid = fd.readline()

fd.close() 

写文件 write 与 writelines 的区别  

Fd.write(str) : 把str写到文件中,write()并不会在str后加上一个换行符
Fd.writelines(content) : 把content的内容全部写到文件中,原样写入,不会在每行后面加上任何东西

Python 相关文章推荐
Python参数类型以及常见的坑详解
Jul 08 Python
Django中ajax发送post请求 报403错误CSRF验证失败解决方案
Aug 13 Python
解决python有时候import不了当前的包问题
Aug 28 Python
python3.8 微信发送服务器监控报警消息代码实现
Nov 05 Python
使用 Python 写一个简易的抽奖程序
Dec 08 Python
浅谈Pycharm的项目文件名是红色的原因及解决方式
Jun 01 Python
Tensorflow中批量读取数据的案列分析及TFRecord文件的打包与读取
Jun 30 Python
python实现npy格式文件转换为txt文件操作
Jul 01 Python
使用ITK-SNAP进行抠图操作并保存mask的实例
Jul 01 Python
python一些性能分析的技巧
Aug 30 Python
python request 模块详细介绍
Nov 10 Python
python中urllib包的网络请求教程
Apr 19 Python
使用Python获取Linux系统的各种信息
Jul 10 #Python
Django中实现一个高性能计数器(Counter)实例
Jul 09 #Python
python实现的登录和操作开心网脚本分享
Jul 09 #Python
python实现的一个火车票转让信息采集器
Jul 09 #Python
python的描述符(descriptor)、装饰器(property)造成的一个无限递归问题分享
Jul 09 #Python
Python中__init__和__new__的区别详解
Jul 09 #Python
Python中使用logging模块代替print(logging简明指南)
Jul 09 #Python
You might like
简单的用PHP编写的导航条程序
2006/10/09 PHP
php实现用户在线时间统计详解
2011/10/08 PHP
PHP异步调用socket实现代码
2012/01/12 PHP
实用的简单PHP分页集合包括使用方法
2013/10/21 PHP
提高php编程效率技巧
2015/08/13 PHP
JQuery autocomplete 使用手册
2010/04/01 Javascript
分享XmlHttpRequest调用Webservice的一点心得
2012/07/20 Javascript
查看大图功能代码jquery版
2013/11/05 Javascript
js跨域访问示例(客户端/服务端)
2014/05/19 Javascript
jquery动态改变div宽度和高度
2015/02/09 Javascript
javascript针对不确定函数的执行方法
2015/12/16 Javascript
封装好的javascript前端分页插件pagination
2016/01/04 Javascript
基于Jquery插件Uploadify实现实时显示进度条上传图片
2020/03/26 Javascript
通用无限极下拉菜单的实现代码
2016/05/31 Javascript
Bootstrap学习笔记之css组件(3)
2016/06/07 Javascript
JS中将多个逗号替换为一个逗号的实现代码
2017/06/23 Javascript
vue.js学习之vue-cli定制脚手架详解
2017/07/02 Javascript
深入掌握 react的 setState的工作机制
2017/09/27 Javascript
node.js中fs文件系统模块的使用方法实例详解
2020/02/13 Javascript
Vue实现简单的拖拽效果
2020/08/25 Javascript
python编写简单爬虫资料汇总
2016/03/22 Python
Python编程生成随机用户名及密码的方法示例
2017/05/05 Python
利用Python暴力破解zip文件口令的方法详解
2017/12/21 Python
django中账号密码验证登陆功能的实现方法
2019/07/15 Python
Python3使用xml.dom.minidom和xml.etree模块儿解析xml文件封装函数的方法
2019/09/23 Python
萨克斯第五大道精品百货店: Saks Fifth Avenue
2017/04/28 全球购物
.NET笔试题(20个问题)
2016/02/02 面试题
上课迟到检讨书100字
2014/01/11 职场文书
中学教师管理制度
2014/01/14 职场文书
幼儿教师国培感言
2014/02/19 职场文书
霸气押韵的班级口号
2014/06/09 职场文书
党的群众路线教育实践活动个人整改方案
2014/10/25 职场文书
2015年社区文体活动总结
2015/03/25 职场文书
文员岗位职责范本
2015/04/16 职场文书
《倍数和因数》教学反思
2016/02/23 职场文书
浅谈sql_@SelectProvider及使用注意说明
2021/08/04 Java/Android