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使用在线API查询IP对应的地理位置信息实例
Jun 01 Python
Python入门_条件控制(详解)
May 16 Python
python函数中return后的语句一定不会执行吗?
Jul 06 Python
关于Django显示时间你应该知道的一些问题
Dec 25 Python
不知道这5种下划线的含义,你就不算真的会Python!
Oct 09 Python
Python实现的特征提取操作示例
Dec 03 Python
python实现多层感知器MLP(基于双月数据集)
Jan 18 Python
Python 互换字典的键值对实例
Feb 12 Python
Python面向对象之类的封装操作示例
Jun 08 Python
调用其他python脚本文件里面的类和方法过程解析
Nov 15 Python
Python 使用 PyQt5 开发的关机小工具分享
Jul 16 Python
通过案例解析python鸭子类型相关原理
Oct 10 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
Laravel框架实现定时Task Scheduling例子
2019/10/22 PHP
通过PHP的Wrapper无缝迁移原有项目到新服务的实现方法
2020/04/02 PHP
json简单介绍
2008/06/10 Javascript
js截取函数(indexOf,join等)
2010/09/01 Javascript
jquery打开直接跳到网页最下面、最低端实现代码
2013/04/22 Javascript
JS实现的用来对比两个用指定分隔符分割的字符串是否相同
2014/09/19 Javascript
JS点击链接后慢慢展开隐藏着图片的方法
2015/02/17 Javascript
javascript实现的多个层切换效果通用函数实例
2015/07/06 Javascript
JS实现网页游戏中滑块响应鼠标点击移动效果
2015/10/19 Javascript
理解JavaScript中Promise的使用
2016/01/18 Javascript
深入浅析JavaScript的API设计原则
2016/06/14 Javascript
Bootstrap企业网站实战项目4
2016/10/14 Javascript
jQuery实现导航高亮的方法【附demo源码下载】
2016/11/09 Javascript
JS前端开发判断是否是手机端并跳转操作(小结)
2017/02/05 Javascript
jQuery按需加载轮播图(web前端性能优化)
2017/02/17 Javascript
Vue-resource实现ajax请求和跨域请求示例
2017/02/23 Javascript
ES6学习之变量的两种命名方法示例
2017/07/18 Javascript
简单的Vue SSR的示例代码
2018/01/12 Javascript
Angularjs之ngModel中的值验证绑定方法
2018/09/13 Javascript
JS数据类型STRING使用实例解析
2019/12/18 Javascript
ES6学习笔记之字符串、数组、对象、函数新增知识点实例分析
2020/01/22 Javascript
vue实现点击按钮“查看详情”弹窗展示详情列表操作
2020/09/09 Javascript
Windows下实现Python2和Python3两个版共存的方法
2015/06/12 Python
python爬取酷狗音乐排行榜
2019/02/20 Python
Python中的Socket 与 ScoketServer 通信及遇到问题解决方法
2019/04/01 Python
一个可以套路别人的python小程序实例代码
2019/04/09 Python
ubuntu上安装python的实例方法
2019/09/30 Python
父母对孩子的寄语
2014/04/09 职场文书
校园环保建议书
2014/05/14 职场文书
工程承诺书怎么写
2014/05/24 职场文书
师范类求职信
2014/06/21 职场文书
2014年施工员工作总结
2014/11/18 职场文书
高三复习计划
2015/01/19 职场文书
烛光里的微笑观后感
2015/06/17 职场文书
《雪域豹影》读后感:父爱的伟大
2019/12/23 职场文书
springboot临时文件存储目录配置方式
2021/07/01 Java/Android