一、python学习过程遇见问题及常识
1.1 参考文章
1) Python 标准库中文版 :https://docs.python.org/zh-cn/3/library/index.html,可以查看各种库文件源码,https://cloud.tencent.com/developer/article/1200628 centos7安装python3 以及tab补全功能(不是很好用 pip安装不上)
2) Python pip 安装与使用 https://www.runoob.com/w3cnote/python-pip-install-usage.html
2)关于如何查看本地python类库详细信息的方法 :
在命令行输入:#python3 -m pydoc -p 1234
python -m pydoc表示打开pydoc模块,这个模块就是用来查看python文档的工具 ,-p 1234表示在端口号1234上打开server,这个端口号可以自行设置,然后就可以在浏览器中打开链接“http://localhost:1234/”,可以看到本地安装的所有packages,选择你需要查看的package点击进去查看相关信息。命令行上会显示Server commands: [b]rowser, [q]uit
[b]、[q]分别表示浏览和退出。
3) 用python查看默认安装路径
import sys
sys.path
4) 案例:——Python脚本获取Linux系统信息 :https://www.linuxidc.com/Linux/2013-08/88531.htm ——Python获取程序运行目录和脚本目录 :https://www.linuxidc.com/Linux/2012-04/57945.htm
二、List (列表)函数&方法
函数&方法 ————描述(list 和alist用法一样)
cmp(list1, list2) 比较两个列表的元素
len(list) 列表元素个数
max(list) 返回列表元素最大值
min(list) 返回列表元素最小值
list(seq) 将元组转换为列表
list.append(obj) 在列表末尾添加新的对象
list.count(obj) 统计某个元素在列表中出现的次数
list.extend(seq) 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
list.index(obj) 从列表中找出某个值第一个匹配项的索引位置
list.insert(index, obj) 将对象插入列表
list.pop(obj=list[-1]) 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值的值
list.reverse() 反向列表中元素
list.sort([func]) 对原列表进行排序
三、tuple(元组)
1)创建空元组 tuple3=()
2)元组中只包含一个元素时,需要在元素后面添加逗号 ,tuple4=(123,)
3)修改 tuple (元组):元组中的元素值是不允许修改的,但可以对元组中的列表可以修改。
4) 删除 tuple (元组):del tuple1
5)内置函数:
cmp(tuple1, tuple2) 比较两个元组元素
len(tuple) 计算元组元素个数
max(tuple) 返回元组中元素最大值
min(tuple) 返回元组中元素最小值
tuple(seq) 将列表转换为元组
四、dict (字典)
1)注意事项:dict (字典)是不允许一个键创建两次的;dict (字典)键必须不可变,可是键可以用数字,字符串或元组充当,但是就是不能使用列表;
2)dict (字典) 的函数和方法:
cmp(dict1, dict2) 比较两个字典元素
len(dict) 计算字典元素个数
str(dict) 输出字典可打印的字符串表示
type(variable) 返回输入的变量类型,如果变量是字典就返回字典类型
dict.clear() 删除字典内所有元素
dict.copy() 返回一个字典的浅复制
dict.values() 以列表返回字典中的所有值
popitem() 随机返回并删除字典中的一对键和值
dict.items() 以列表返回可遍历的(键, 值) 元组数组
3)用法:
adict = dict()
Dict = {}
Dict = dict.fromkeys([‘a’,‘b’])——》{‘a’:None,‘b’:None}
Dict = dict(a=“1”,b=“2”)——》{‘a’:‘1’,‘b’:‘2’}
Dict.has_key(key) 判断一个字典是否有某个key —— Dict.has_key(‘b’)
Dict.keys() 获得一个字典所有的key,存入一个list中
Dict.values() 获得一个字典所有的value,存入一个list中
Dict.copy() 将一个Dict拷贝给另一个Dict,而不是传索引
Dict.get(key, default) 获得指定key的值,如果没有值,返回default值
Dict.update(Dict_1) 遍历Dict_1来更新Dict
Dict.pop(key) 取出一个key,并从dict中移除他
Dict.clear() 清空字典
Dict.items() 把dict变为可遍历的元组数组
五、python读写、创建文件、文件夹
python中对文件、文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块。
得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd()
返回指定目录下的所有文件和目录名:os.listdir()
函数用来删除一个文件:os.remove()
删除多个目录:os.removedirs(r“c:\python”)
检验给出的路径是否是一个文件:os.path.isfile()
检验给出的路径是否是一个目录:os.path.isdir()
判断是否是绝对路径:os.path.isabs()
检验给出的路径是否真地存:os.path.exists()
返回一个路径的目录名和文件名:os.path.split() eg os.path.split(’/home/swaroop/byte/code/poem.txt’) 结果:(’/home/swaroop/byte/code’, ‘poem.txt’)
分离扩展名:os.path.splitext()获取路径名:os.path.dirname()
获取文件名:os.path.basename()
运行shell命令: os.system()
读取和设置环境变量:os.getenv() 与os.putenv()
给出当前平台使用的行终止符:os.linesep Windows使用’\r\n’,Linux使用’\n’而Mac使用’\r’
指示你正在使用的平台:os.name 对于Windows,它是’nt’,而对于Linux/Unix用户,它是’posix’重命名:os.rename(old, new)
创建多级目录:os.makedirs(r“c:\python\test”)
创建单个目录:os.mkdir(“test”)
获取文件属性:os.stat(file)
修改文件权限与时间戳:os.chmod(file)
终止当前进程:os.exit()
获取文件大小:os.path.getsize(filename)
os.ctermid() 返回与进程的控制终端对应的文件名 ,就是是哪个终端,就是/dev/tty 那几个
os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
os.chdir(“dirname”) 改变当前脚本工作目录;相当于shell下cd
os.curdir 返回当前目录: (’.’)
os.pardir 获取当前目录的父目录字符串名:(’…’)
os.makedirs(‘dirname1/dirname2’) 可生成多层递归目录
os.removedirs(‘dirname1’) 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.mkdir(‘dirname’) 生成单级目录;相当于shell中mkdir dirname
os.rmdir(‘dirname’) 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
os.listdir(‘dirname’) 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
os.remove() 删除一个文件
os.removedirs() 删除多个目录,就是级联删除
os.rename(“oldname”,“newname”) 重命名文件/目录
os.exit(code) 退出当前进程, 可以返回具体的 code 码
os.stat(‘path/filename’) 获取文件/目录信息
os.sep 输出操作系统特定的路径分隔符,win下为"\",Linux下为"/"
os.linesep 输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"
os.pathsep 输出用于分割文件路径的字符串 win下为;,Linux下为:
os.name 输出字符串指示当前使用平台。win->‘nt’; Linux->‘posix’ java ce 一共四种
os.uanem() 返回系统的详细信息
os.system(“bash command”) 运行shell命令,直接显示
os.environ 获取系统环境变量 就是用户所有的环境变量
os.path.abspath(path) 返回path规范化的绝对路径
os.path.split(path) 将path分割成目录和文件名二元组返回
os.path.splitest(file) 按后缀分成两部分
os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素
os.path.basename(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False
os.path.isabs(path) 如果path是绝对路径,返回True
os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False
os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False
os.path.join(path1[, path2[, …]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
os.path.getatime(path) 返回path所指向的文件或者目录的最后存取时间
os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间
os.path.getsize(path) 返回path的大小
os.path.getsize(file) 返回文件的大小,如果是文件夹则返回0
os.access(file,mode) mode 的值有:
os.listdir (‘目录路径‘):返回一个list,包含给定path 目录下所有条目的名字。该list是任意顺序,不包括特殊条目’.‘以及’…’,即使它们存在于目录中。path可以是str类型或bytes类型。如果path的类型为bytes,则返回的文件名也将为bytes类型;否则,它们的类型为str。
os.walk 是一个简单易用的文件、目录遍历器.
walk(top, topdown=True, οnerrοr=None, followlinks=False)
top 是你所要遍历的目录的地址
topdown 为真,则优先遍历top目录,否则优先遍历top的子目录(默认为开启)
onerror 需要一个 callable 对象,当walk需要异常时,会调用
followlinks 如果为真,则会遍历目录下的快捷方式(linux 下是 symbolic link)实际所指的目录(默认关闭)
os.walk 的返回值是一个生成器(generator),也就是说我们需要不断的遍历它,来获得所有的内容。每次遍历的对象都是返回的是一个三元组(root,dirs,files):
root 所指的是当前正在遍历的这个文件夹的本身的地址
dirs 是一个 list ,内容是该文件夹中所有的目录的名字(不包括子目录)
files 同样是 list , 内容是该文件夹中所有的文件(不包括子目录)
————————————————————————————————————
文件操作:
os.mknod(“test.txt”) 创建空文件
fp = open(“test.txt”,w) 直接打开一个文件,如果文件不存在则创建文件关于open 模式:w 以写方式打开,
a 以追加模式打开 (从 EOF 开始, 必要时创建新文件)
r+ 以读写模式打开
w+ 以读写模式打开 (参见 w )
a+ 以读写模式打开 (参见 a )
rb 以二进制读模式打开
wb 以二进制写模式打开 (参见 w )
ab 以二进制追加模式打开 (参见 a )
rb+ 以二进制读写模式打开 (参见 r+ )
wb+ 以二进制读写模式打开 (参见 w+ )
ab+ 以二进制读写模式打开 (参见 a+ ) fp.read([size])
#size为读取的长度,以byte为单位fp.readline([size])
#读一行,如果定义了size,有可能返回的只是一行的一部分fp.readlines([size])
#把文件每一行作为一个list的一个成员,并返回这个list。其实它的内部是通过循环调用readline()来实现的。如果提供size参数,size是表示读取内容的总长,也就是说可能只读到文件的一部分。
fp.write(str) #把str写到文件中,write()并不会在str后加上一个换行符fp.writelines(seq)
#把seq的内容全部写到文件中(多行一次性写入)。这个函数也只是忠实地写入,不会在每行后面加上任何东西。
fp.close() #关闭文件。
python会在一个文件不用后自动关闭文件,不过这一功能没有保证,最好还是养成自己关闭的习惯。 如果一个文件在关闭后还对其进行操作会产生ValueErrorfp.flush()
#把缓冲区的内容写入硬盘fp.fileno()
#返回一个长整型的”文件标签“fp.isatty()
#文件是否是一个终端设备文件(unix系统中的)fp.tell()
#返回文件操作标记的当前位置,以文件的开头为原点fp.next()
#返回下一行,并将文件操作标记位移到下一行。把一个file用于for … in file这样的语句时,就是调用next()函数来实现遍历的。
fp.seek(offset[,whence]) #将文件打操作标记移到offset的位置。这个offset一般是相对于文件的开头来计算的,一般为正数。但如果提供了whence参数就不一定了,whence可以为0表示从头开始计算,1表示以当前位置为原点计算。2表示以文件末尾为原点进行计算。需要注意,如果文件以a或a+的模式打开,每次进行写操作时,文件操作标记会自动返回到文件末尾。
fp.truncate([size]) #把文件裁成规定的大小,默认的是裁到当前文件操作标记的位置。如果size比文件的大小还要大,依据系统的不同可能是不改变文件,也可能是用0把文件补到相应的大小,也可能是以一些随机的内容加上去。 目录操作:os.mkdir(“file”) 创建目录
复制文件:shutil.copyfile(“oldfile”,“newfile”) oldfile和newfile都只能是文件
shutil.copy(“oldfile”,“newfile”) oldfile只能是文件夹,newfile可以是文件,也可以是目标目录
复制文件夹:shutil.copytree(“olddir”,“newdir”) olddir和newdir都只能是目录,且newdir必须不存在
重命名文件(目录)os.rename(“oldname”,“newname”) 文件或目录都是使用这条命令
移动文件(目录)shutil.move(“oldpos”,“newpos”)
删除文件 os.remove(“file”)
删除目录 os.rmdir(“dir”)只能删除空目录
shutil.rmtree(“dir”) 空目录、有内容的目录都可以删
转换目录 os.chdir(“path”) 换路径 Python读写文件
1.open
使用open打开文件后一定要记得调用文件对象的close()方法。比如可以用try/finally语句来确保最后能关闭文件。file_object = open(‘thefile.txt’)
try:
all_the_text = file_object.read( )
finally:
file_object.close( )注:不能把open语句放在try块里,因为当打开文件出现异常时,文件对象file_object无法执行close()方法。2.读文件
读文本文件
input = open(‘data’, ‘r’)
#第二个参数默认为r
input = open(‘data’) 读二进制文件
input = open(‘data’, ‘rb’)
读取所有内容
file_object = open(‘thefile.txt’)
try:
all_the_text = file_object.read( )
finally:
file_object.close( )
读固定字节
file_object = open(‘abinfile’, ‘rb’)
try:
while True:
chunk = file_object.read(100)
if not chunk:
break
do_something_with(chunk)
finally:
file_object.close( )
读每行
list_of_all_the_lines = file_object.readlines( )如果文件是文本文件,还可以直接遍历文件对象获取每行:for line in file_object:
process line
3.写文件
写文本文件
output = open(‘data’, ‘w’)
写二进制文件
output = open(‘data’, ‘wb’)
追加写文件
output = open(‘data’, ‘w+’)
写数据
file_object = open(‘thefile.txt’, ‘w’)
file_object.write(all_the_text)
file_object.close( )
写入多行
file_object.writelines(list_of_text_strings)注意,调用writelines写入多行在性能上会比使用write一次性写入要高。在处理日志文件的时候,常常会遇到这样的情况:日志文件巨大,不可能一次性把整个文件读入到内存中进行处理,例如需要在一台物理内存为 2GB 的机器上处理一个 2GB 的日志文件,我们可能希望每次只处理其中 200MB 的内容。
在 Python 中,内置的 File 对象直接提供了一个 readlines(sizehint) 函数来完成这样的事情。
以下面的代码为例:file = open(‘test.log’, ‘r’)sizehint = 209715200 # 200Mposition = 0lines = file.readlines(sizehint)while not file.tell() - position < 0: position = file.tell() lines = file.readlines(sizehint)每次调用 readlines(sizehint) 函数,会返回大约 200MB 的数据,而且所返回的必然都是完整的行数据,大多数情况下,返回的数据的字节数会稍微比 sizehint 指定的值大一点(除最后一次调用 readlines(sizehint) 函数的时候)。通常情况下,Python 会自动将用户指定的 sizehint 的值调整成内部缓存大小的整数倍。
file在python是一个特殊的类型,它用于在python程序中对外部的文件进行操作。在python中一切都是对象,file也不例外,file有file的方法和属性。
下面先来看如何创建一个file对象:
file(name[, mode[, buffering]])
file()函数用于创建一个file对象,它有一个别名叫open(),可能更形象一些,它们是内置函数。来看看它的参数。它参数都是以字符串的形式传递的。name是文件的名字。
mode是打开的模式,可选的值为r、 w 、a、 U,分别代表读(默认) 写 添加支持各种换行符的模式。
用w或a模式打开文件的话,如果文件不存在,那么就自动创建。此外,用w模式打开一个已经存在的文件时,原有文件的内容会被清空,因为一开始文件的操作的标记是在文件的开头的,这时候进行写操作,无疑会把原有的内容给抹掉。
由于历史的原因,换行符在不同的系统中有不同模式,比如在 unix中是一个\n,而在windows中是‘\r\n’,用U模式打开文件,就是支持所有的换行模式,也就说‘\r’ ‘\n’ '\r\n’都可表示换行,会有一个tuple用来存贮这个文件中用到过的换行符。不过,虽说换行有多种模式,读到python中统一用\n代替。在模式字符的后面,还可以加上**+ b、 t这两种标识,分别表示可以对文件同时进行读写操作和用二进制模式、文本模式(默认)打开文件**。
buffering如果为0表示不进行缓冲;如果为1表示进行“行缓冲“;如果是一个大于1的数表示缓冲区的大小,应该是以字节为单位的,。
file对象有自己的属性和方法。
先来看看file的属性。
closed #标记文件是否已经关闭,由close()改写
encoding #文件编码
mode #打开模式
name #文件名
newlines #文件中用到的换行模式,是一个tuple
softspace #boolean型,一般为0,据说用于printfile的读写方法:
F.read([size]) #size为读取的长度,以byte为单位
F.readline([size])
#读一行,如果定义了size,有可能返回的只是一行的一部分
F.readlines([size])
#把文件每一行作为一个list的一个成员,并返回这个list。其实它的内部是通过循环调用readline()来实现的。如果提供size参数,size是表示读取内容的总长,也就是说可能只读到文件的一部分。
F.write(str)
#把str写到文件中,write()并不会在str后加上一个换行符
F.writelines(seq)
#把seq的内容全部写到文件中。这个函数也只是忠实地写入,不会在每行后面加上任何东西。
file的其他方法:
F.close()
#关闭文件。python会在一个文件不用后自动关闭文件,不过这一功能没有保证,最好还是养成自己关闭的习惯。如果一个文件在关闭后还对其进行操作会产生ValueError
F.flush() #把缓冲区的内容写入硬盘
F.fileno() #返回一个长整型的”文件标签“
F.isatty() #文件是否是一个终端设备文件(unix系统中的)
F.tell() #返回文件操作标记的当前位置,以文件的开头为原点
F.next() #返回下一行,并将文件操作标记位移到下一行。把一个file用于for … in file这样的语句时,就是调用next()函数来实现遍历的。
F.seek(offset[,whence]) #将文件打操作标记移到offset的位置。这个offset一般是相对于文件的开头来计算的,一般为正数。但如果提供了whence参数就不一定了,whence可以为0表示从头开始计算,1表示以当前位置为原点计算。2表示以文件末尾为原点进行计算。需要注意,如果文件以a或a+的模式打开,每次进行写操作时,文件操作标记会自动返回到文件末尾。
F.truncate([size]) #把文件裁成规定的大小,默认的是裁到当前文件操作标记的位置。如果size比文件的大小还要大,依据系统的不同可能是不改变文件,也可能是用0把文件补到相应的大小,也可能是以一些随机的内容加上去。
getpass 模块
getpass模块提供了可移植的密码输入,常用的是:
1、 getpass.getpass()
getpass.getpass([prompt[, stream]]) ,prompt——是提示字符串,不输入默认显示提示符’Password: ’
2、getpass.getuser() ——该函数返回登陆的用户名,不需要参数
3、exception getpass.GetPassWarning Python内置异常 UserWarning 的子类,当密码输入可能被回显时抛出。