Python编程中常用的基础知识总结
发布时间:2026/9/28 4:46:41来源:尧图网络
在编程领域有一些十分关键的基础理论要点被归纳为12类内容, 这些内容涉及遍历文件目录的方式, 把列表里的数据按照列进行排序以及移除重复值的过程, 对字典内部元素的排列规则进行调整的方法,实现字典与列表还有字符串三者之间互相转换的操作技巧, 处理时间相关对象的种种手法, 解释来自命令行输入参数的流程方式, 使用特定的输出语句来安排打印内容的格式变化, 在不同数制体系下进行相互转化的操作逻辑, 执行系统指令或者运行外部脚本程序的动作过程, 以及对存储介质中的文本内容进行读取和写入的相关技术。遍历目录方法在有些时刻, 我们非得去遍历某个指定的目录不可, 并且要把里面的特定文件列表给找出来是可以的, 这时候就完全可以通过调用os.walk这个具体的方法来实现遍历操作, 而且这种做法被大家公认是非常方便的。123456789101112import osfileList []rootdir /datafor 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把列表按照列进行排序, 也就是通过列对列表进行排列。如果列表的各个组成部分均为一个元组, 那么想要针对该元组的某个特定列来进行排序操作的话, 大家可以参照下面所呈现出的相关方法进行实现。在下方的这些示例之中, 我们所采取的排序依据是, 针对那个元组里面的序号为2的那一列以及序号为3的那一列里面的数据来进行操作, 并且我们还设定了一个参数, 将这个倒序的状态给开启为真, 以此来实现反向排序的效果。123456789101112 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, keylambda result: result[1],reverseTrue) 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, keylambda result: result[2],reverseTrue) 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)]列表去重(list uniq)在部分时候人们需要把列表里面那些重复出现的元素给删除掉, 那么就可以去使用下面所提到的这个方法。1234567 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])对字典进行排序, 也就是执行字典排序操作。通常来说, 大家都是根据字典的键来执行排序工作的, 可是如果我们其实是想要依据字典里的值来进行排序的话, 那么就可以采用下面所叙述的方法来操作。1234567 from operator import itemgetter aa {a:1,sss:2,ffdf:5,ffff2:3} sort_aa sorted(aa.items(),keyitemgetter(1)) sort_aa[(a, 1), (sss, 2), (ffff2, 3), (ffdf, 5)]或者 sort_aa sorted(aa.items(), keylambda result: result[1])字典,列表,字符串互转这就是用来生成数据库的连接字符串的, 具体的操作是把字典转换成字符串。12345 params {server:mpilgrim, database:master, uid:sa, pwd:secret} [%s%s % (k, v) for k, v in params.items()][servermpilgrim, uidsa, databasemaster, pwdsecret] ;.join([%s%s % (k, v) for k, v in params.items()])servermpilgrim;uidsa;databasemaster;pwdsecret在下面这个例子当中, 是把那个字符串转变成为字典格式的。123456 a servermpilgrim;uidsa;databasemaster;pwdsecret aa {} for i in a.split(;):aa[i.split(,1)[0]] i.split(,1)[1] #split(,1)表示按分割1次... aa{pwd: secret, database: master, uid: sa, server: mpilgrim}时间对象操作123456789101112131415161718192021222324252627282930313233将时间对象转换成字符串 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 t2False t1 t2True时间差值计算,计算8小时前的时间 datetime.datetime.now().strftime(%Y-%m-%d %H:%M)2011-01-20 15:02 (datetime.datetime.now() - datetime.timedelta(hours8)).strftime(%Y-%m-%d %H:%M)2011-01-20 07:03将字符串转换成时间对象 endtimedatetime.datetime.strptime(20100701,%Y%m%d) type(endtime)datetime.datetime print endtime2010-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命令行参数解析()一般在编写日常的运维脚本的时候, 常常要根据各种各样的不同情况, 来输入对应的命令行设置选项, 从而达到执行不同功能的目的。在某个地方提供了相应的模块, 这个模块能够非常出色地解决命令行输入的解析工作, 下面我们就通过具体的例子来进行说明分析。请看接下来出现的这段程序代码:1234567891011121314151617181920212223242526272829303132333435363738394041424344#!/usr/bin/env python# -*- coding: utf-8 -*-import sys,os,getoptdef 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 infotest.py -s haha -n HA Hatry: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 % argelif opt -f:print read file %s % argelif opt -c:print user-defined %s % argelif opt -e:print Exchange Name %s % argelif opt -s:print Stock code %s % argelif opt -n:print Stock name %s % argsys.exit()把那些需要打印出来的值进行格式化处理后, 再进行输出显示。截取字符串输出,下面例子将只输出字符串的前3个字母12345678910111213141516171819202122232425262728 strabcdefg print %.3s % strabc按固定宽度输出不足使用空格补全,下面例子输出宽度为10 strabcdefg print s % strabcdefg截取字符串按照固定宽度输出 strabcdefg print .3s % strabc浮点类型数据位数保留 import fpformat a 0.0030000000005 bfpformat.fix(a,6) print b0.003000对浮点数四舍五入,主要使用到round函数 from decimal import * a 2.26 b 2.29 c Decimal(a) - Decimal(b) print c-0.03 c / Decimal(a) * 100Decimal(-1.327433628318584070796460177) Decimal(str(round(c / Decimal(a) * 100, 2)))Decimal(-1.33)进制转换在极少数情形下, 是需要进行不同进制之间相互转换的操作的, 具体的参考依据可以查看下面呈现出来的这一些例子, 其中表示的是十六进制, 表示的是十进制, 而则表示的是八进制这个意思。123 num 10 print Hex %x,Dec %d,Oct %o %(num,num,num)Hex a,Dec 10,Oct 12调用系统内部命令, 或者去执行相应的脚本程序。12345678910111213141516使用 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/cpuinfo0使用 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)读写文件一次性读入文件到列表速度较快适用文件比较小的情况下track_file track_stock.conffd 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的内容全部写到文件中,原样写入不会在每行后面加上任何东西
网站建设高端定制企业官网