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中的异常处理学习笔记
Jan 28 Python
Python import自定义模块方法
Feb 12 Python
python中字符串前面加r的作用
Jun 04 Python
快速入手Python字符编码
Aug 03 Python
Flask框架WTForm表单用法示例
Jul 20 Python
一篇文章弄懂Python中所有数组数据类型
Jun 23 Python
Python实现 PS 图像调整中的亮度调整
Jun 28 Python
python实现的分析并统计nginx日志数据功能示例
Dec 21 Python
关于Python turtle库使用时坐标的确定方法
Mar 19 Python
Python如何进行时间处理
Aug 06 Python
python脚本第一行如何写
Aug 30 Python
解决PyCharm无法使用lxml库的问题(图解)
Dec 22 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 array_flip() 删除重复数组元素专用函数
2010/05/16 PHP
PHP swfupload图片上传的实例代码
2013/09/30 PHP
php去除数组中重复数据
2014/11/18 PHP
Yii1.1中通过Sql查询进行的分页操作方法
2017/03/16 PHP
Laravel核心解读之异常处理的实践过程
2019/02/24 PHP
PHP实现微信小程序用户授权的工具类示例
2019/03/05 PHP
Avengerls vs Newbee BO3 第三场2.18
2021/03/10 DOTA
JavaScript Math.ceil() 函数使用介绍
2013/12/11 Javascript
简单选项卡 js和jquery制作方法分享
2014/02/26 Javascript
有关easyui-layout中的收缩层无法显示标题的解决办法
2016/05/10 Javascript
javascript表单事件处理方法详解
2016/05/15 Javascript
封装的dialog插件 基于bootstrap模态对话框的简单扩展
2016/08/10 Javascript
JavaScript实现url参数转成json形式
2016/09/25 Javascript
js当前页面登录注册框,固定div,底层阴影的实例代码
2016/10/04 Javascript
JavaScript中Require调用js的实例分享
2017/10/27 Javascript
详解KOA2如何手写中间件(装饰器模式)
2018/10/11 Javascript
微信小程序封装自定义弹窗的实现代码
2019/05/08 Javascript
layui使用templet格式化表格数据的方法
2019/09/16 Javascript
python实现解数独程序代码
2017/04/12 Python
Python字典,函数,全局变量代码解析
2017/12/18 Python
python3.6使用pymysql连接Mysql数据库
2018/05/25 Python
PyCharm导入python项目并配置虚拟环境的教程详解
2019/10/13 Python
pytorch-RNN进行回归曲线预测方式
2020/01/14 Python
jupyter lab的目录调整及设置默认浏览器为chrome的方法
2020/04/10 Python
python百行代码自制电脑端网速悬浮窗的实现
2020/05/12 Python
图解Python中深浅copy(通俗易懂)
2020/09/03 Python
python可视化 matplotlib画图使用colorbar工具自定义颜色
2020/12/07 Python
纯CSS实现的大小渐变、渐远效果
2014/04/15 HTML / CSS
Sephora丝芙兰澳洲官方网站:国际知名化妆品购物
2016/10/27 全球购物
芝加哥牛排公司:Chicago Steak Company
2018/10/31 全球购物
专业实习自我鉴定
2013/10/29 职场文书
小区门卫值班制度
2014/01/24 职场文书
信息工作经验交流材料
2014/05/28 职场文书
行政专员岗位职责范本
2014/08/26 职场文书
浪漫的婚礼主持词
2015/06/30 职场文书
如何利用 CSS Overview 面板重构优化你的网站
2021/10/24 HTML / CSS