python基础编程

文件与文件系统

打开文件

  • open(file, mode='r', buffering=None, encoding=None, newline=None, closefd=True)
    • file:必需,文件路径(相对或者绝对路径)
    • mode:可选,文件打开模式
    • buffering:设置缓冲
    • encoding:一般使用utf8
    • errors:报错级别
    • newline:区分换行符
      常见地mode如下表所示:
打开模式执行操作
‘r’以只读方式打开文件,指针会放在文件开头,default
‘w’打开文件用于写入,已存在则打开并从头开始编辑,原有内容删除,如果文件不存在,则创建新文件
‘x’写模式,新建文件,如果文件存在则报错
‘a’打开一个文件用于追加,如果文件存在 ,指针放在文件末尾,如果不存在,创建新文件进行写入
‘b’以二进制打开文件,一般用于非文本文件,如图片
‘t’一般用于文本,如txt
‘+’可读写模式(可添加到其他模式中使用)

文件对象方法

  • fileObject.close()用于关闭一个已打开的文件。关闭后的文件不能再进行读写操作,否则会触发ValueError错误。
  • fileObject.tell()返回文件的当前位置,即指针当前位置
f = open('将进酒.txt', 'r')
line = f.readline()    #读取一行
print(line)
# 君不见,黄河之水天上来,奔流到海不复回。
pos = f.tell()
print(pos)  # 42
f.close()
  • fileObject.seek(offset[,whence])用于移动文件读取指针到指定位置
    • offset:开始的偏移量,移动偏移的字节数,负数表示倒数第几位开始
    • whence:可选,默认为0,表示从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。
  • fileObeject.write()用于向文件中写入指定字符串,返回的是写入的字符长度
f = open('workfile.txt', 'wb+')
print(f.write(b'0123456789abcdef'))  # 16
print(f.seek(5))  # 5
print(f.read(1))  # b'5'
print(f.seek(-3, 2))  # 13
print(f.read(1))  # b'd'

在文件关闭前或缓冲区刷新前,字符串内容存储在缓冲区中,这时你在文件中是看不到写入的内容的。
如果文件打开模式带b,那写入文件内容时,str(参数)要用encode方法转为bytes形式,否则报错:TypeError: a bytes-like object is required, not ‘str’。

  • fileObject.writelines(sequence)向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符\n

简洁的with语句

一些对象定义了标准的清理行为,无论系统是否成功的使用了它,一旦不需要它了,那么这个标准的清理行为就会执行。即代码执行完毕后们就算处理过程中出问题了,文件f总是会关闭。

try:
    f = open('myfile.txt', 'w')
    for line in f:
        print(line)
except OSError as error:
    print('出错啦!%s' % str(error))
finally:
    f.close()

# 出错啦!not readable
try:
    with open('myfile.txt', 'w') as f:
        for line in f:
            print(line)
except OSError as error:
    print('出错啦!%s' % str(error))

# 出错啦!not readable   

OS模块中关于文件/目录常用的函数

我们所知道常用的操作系统就有:Windows,Mac OS,Linu,Unix等,这些操作系统底层对于文件系统的访问工作原理是不一样的,因此你可能就要针对不同的系统来考虑使用哪些文件系统模块……,这样的做法是非常不友好且麻烦的,因为这样就意味着当你的程序运行环境一改变,你就要相应的去修改大量的代码来应对。
有了OS(Operation System)模块,我们不需要关心什么操作系统下使用什么模块,OS模块会帮你选择正确的模块并调用

os.getcwd()用于返回当前工作目录
os.chdir(path)用于改变当前工作目录到指定的路径
listdir(path=’.’) 返回path指定的文件夹包含的文件或文件夹的名字的列表
os.mkdir(path)创建单层目录,如果该目录已存在抛出异常
os.makedirs(path)用于递归创建多层目录,如果该目录存在抛出异常
os.remove(path)用于删除指定路径的文件,如果指定的路径是一个目录,将抛出OSError
os.rmdir(path)用于删除单层目录,仅当文件夹是空的才可以,否则抛出OSError
os.removedirs(path)递归删除目录,从子目录到父目录逐层尝试删除,遇到目录非空则抛出异常
os.rename(src,dst)方法用于命名文件或目录,从src到dst,如果dst是一个存在的目录,则抛出OSError
os.system(command)运行系统的shell命令(将字符串转换成命令)
os.curdir指代当前目录(.)
os.pardir指代上一级目录(…)
os.sep输出操作系统特定的路径分隔符(win下为\,Linux下为/)
os.linesep当前平台使用的行终止符(win下为\r\n,Linux下为\n)
os.name指代当前使用的操作系统(包括:‘mac’,‘nt’)
os.path.basename(path)去掉目录路径,单独返回文件名
os.path.dirname(path)去掉文件名,单独返回目录路径
os.path.join(path1[, path2[, …]])将 path1,path2 各部分组合成一个路径名
os.path.split(path)分割文件名与路径,返回(f_path,f_name)元组。如果完全使用目录,它会将最后一个目录作为文件名分离,且不会判断文件或者目录是否存在。
os.path.splitext(path)分离文件名与扩展名,返回(f_path,f_name)元组。
os.path.getsize(file)返回指定文件大小,单位是字节。
os.path.getatime(file)返回指定文件最近的访问时间
os.path.getctime(file)返回指定文件的创建时间
os.path.getmtime(file)返回指定文件的最新的修改时间
浮点型秒数,可用time模块的gmtime()或localtime()函数换算
os.path.exists(path)判断指定路径(目录或文件)是否存在
os.path.isabs(path)判断指定路径是否为绝对路径
os.path.isdir(path)判断指定路径是否存在且是一个目录
os.path.isfile(path)判断指定路径是否存在且是一个文件
os.path.islink(path)判断指定路径是否存在且是一个符号链接
os.path.ismount(path)判断指定路径是否存在且是一个悬挂点
os.path.samefile(path1,path2)判断path1和path2两个路径是否指向同一个文件

序列化与反序列化

Python 的 pickle 模块实现了基本的数据序列和反序列化。

  • 通过 pickle 模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储。
  • 通过 pickle 模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象。
    理解是对对象按原本顺序存储到文件中
    常用函数:
pickle.dump(obj,file,[,protocol]) #将obj对象序列化存入已经打开的file中

obj:想要序列化的obj对象
file:文件名称
protocol:序列化使用的协议,默认为0,负值或者HIGHEST_PROTOCOL,则使用最高的协议版本
pikle.load(file) 将file中的对象序列化读出

【为什么学PythonPython 是当今非常热门的语言之一,2020年的 TIOBE 编程语言排行榜中 ,Python名列第一,并且其流行度依然处在上升势头。 在2015年的时候,在网上还经常看到学Python还是学R的讨论,那时候老齐就选择了Python,并且开始着手出版《跟老齐学Python》。时至今日,已经无需争论。Python给我们带来的,不仅仅是项目上的收益,我们更可以从它“开放、简洁”哲学观念中得到技术发展路线的启示。 借此机会,老齐联合CSDN推出了本课程,希望能影响更多的人走进Python,踏入编程的大门。 【课程设计】 本课程共包含三大模块: 一、基础知识篇 内置对象和基本的运算、语句,是Python语言的基础。本课程在讲解这部分知识的时候,不是简单地将各种知识做简单的堆砌,而是在兼顾内容的全面性的同时,更重视向学习者讲授掌握有关知识的方法,比如引导学习者如何排查错误、如何查看和理解文档等。   二、面向对象篇 “面向对象(OOP)”是目前企业开发主流的开发方式,本课程从一开始就渗透这种思想,并且在“函数”和“类”的学习中强化面向对象开发方式的学习——这是本课程与一般课程的重要区别,一般的课程只在“类”这里才提到“对象”,会导致学习者茫然失措,并生畏惧,乃至于放弃学习。本课程则是从开始以“润物细无声”的方式,渗透对象概念,等学习到本部分的时候,OOP对学习者而言有一种“水到渠成”的感觉。   三、工具实战篇 在项目实战中,除了前述的知识之外,还会用到很多其他工具,至于那些工具如何安装?怎么自己做工具?有那些典型工具?都是这部分的内容。具体来说,就是要在这部分介绍Python标准库的应用以及第三方包的安装,还有如何开发和发布自己的工具包。此外,很多学习Python的同学,未来要么从事数据科学、要么从事Web开发,不论哪个方向,都离不开对数据库的操作,本部分还会从实战的角度,介绍如何用Python语言操作常用数据库。
©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页