Python基础刻意训练——DAY7
学习内容:
主要内容:文件与文件系统
前言:
文件调用的好处,可以直接将重要的数据放在文件中,需要的时候调用即可,使得代码条理更加清晰,而不会因为数据量的冗长变得可读性很差。另外,python对于文件调用的直接性,使得文件的查找还有相关的操作更加便捷(类似于Linux,Windows的cmd命令操作),而省去了其他的不必要的查询时间。
1)文件操作:
文件格式一般有这些:exe txt avi
- 打开文件:
基本格式
f=open(r"地址",模式(默认为r–读取)
相关模式:
模式 | 含义 |
---|---|
‘r’ | 只读模式(默认) |
‘w’ | 写入方式打开,覆盖 已存在 的文件 |
‘x’ | 文件如果存在,则显示异常 |
‘a’ | 写入模式打开,文件存在,末尾补写;不存在,新建写入 |
‘b’ | 二进制打开文件 |
‘t’ | 文本模式打开(默认) |
‘+’ | 可读写模式(可添加到其他模式中使用) |
‘U’ | 通用换行符支持 |
注意:
写文件名的时候需要考虑到转义字符的情况,因此我采用了r’字符’的方式,来保证内部文件名的正常。——也可以使用加加斜杠转义,或者是反斜杠
另外,我们能够查询的往往是文件所在的文件夹的位置,需要在后面添加\然后根据提示,选择我们需要打开的文件
参考链接:
https://blog.csdn.net/xd060606/article/details/87164798
- 文件操作的相关函数:
函数 | 含义 |
---|---|
f.read([size=-1]) | 读取size 个字符 (当未给定size或给定负值的时候,读取剩余的所有字符) |
f.readline([size=-1]) | 默认参数为-1,如果参数为负数,或者是没有,则读出这一行后面的所有信息 {如果参数大于0,则读入size个字符;如果参数为0,则读入‘’(空格字符)} |
f.write(str) | 将字符串写进文件中 (注意:必须要打开‘w’写入模式(完全覆盖)或者是‘a’写入模式(末尾追加)) |
f.writelines(seq) | 写入字符串序列,seq是一个返回字符串的可迭代对象 |
f.close() | 关闭文件 |
f.tell() | 查找当前书签(指针)的位置 |
f.seek(offset,from) | 从from(0表示文件起始位置,1表示当前位置,2表示文件末尾)偏移offset个字节 |
f.truncate([size=file.tell()]) | 文件到size的位置,默认是文件到当前的位置。 |
参考文件操作法函数链接:
https://fishc.com.cn/forum.php?mod=viewthread&tid=45279&extra=page%3D1%26filter%3Dtypeid%26typeid%3D403
注意事项:
- 随时关闭文件——f.close()
原因:
在没有关闭文件之前,输入的所有数据都作为缓存,放在python的缓存区里面,此时点开文件可以发现文件里面并没有输入写入的数据,而当完成了关闭文件的过程之后,数据就存入进去了。——同时,也提醒着我们,一定要主要保存好自己的相关数据。 - f.tell()返回字节数目——一个中文符号与文字占用两个字节;而一个英文字母与符号占用一个字节
- f.seek(offset,from)——偏移为+,右移;偏移为-,左移。在文本文件中,没有使用b模式选项打开的文件,只能从文件头开始计算相对位置,而从文件末尾计算会引发异常现象。例如:‘rb+’‘rb’
参考链接:http://www.dutycode.com/post-30.html
https://www.cnblogs.com/xuexizongjie/p/10674306.html
-
f.write()或者是f.writelines(seq)——一定要打开写入模式
参考链接:http://c.biancheng.net/view/4758.html -
f.truncate()——在使用的时候,一定要先打开写入的模式,当然,为了能够读,也要打开读的模式,这个时候建议打开‘a+’ ——如果没有打开写入的模式,会显示打不开。。
参考链接:https://www.runoob.com/python/file-truncate.html
打印文本的常用操作:
###官方经典操作
for each_line in f:
print(each_line)
###一般操作
lines=list(f)
for each_line in lines:
print(each_line)
2)文件系统操作:
先介绍一下模块的定义:包含所有你定义的函数和变量的文件,后缀名是.py。模块可以被其他程序引入,以使用该模块中的函数等功能
今天使用的模块是OS(operating system) 模块,python的跨平台OS模块可以帮助选择正确的模块并且调用
- os模块的相关函数:
函数形式 | 含义 |
---|---|
os.getcwd() | 返回当前工作的目录 |
os.chdir() | 改变工作目录 |
os.listdir(path=’.’) | 列举指定目录下的所有文件夹名默认为当前目录下的所有文件 (‘.’当前目录,‘…’表示上一级目录))‘.’与‘…’的操作仅限于当前 目录(非指定的目录)的文件名查看,而且‘…’就不能进行查看 |
os.mkdir(path) | 创建单层目录,如果已经存在,则抛出异常 |
os.makedirs(path) | 创建多层目录 |
os.rmdir() | 删除单层目录 |
os.removedirs | 删除多层目录 |
os.rename(old,new) | 更改文件的名字 |
os.system(‘command’) | 运行系统的shell命令 cmd calc |
os.curdir | 当前目录’.’ |
os.pardir | 上一级目录’…’ 例如:os.listdir(os.pardir) |
os.sep | 输出操作系统特有的路径分隔符(win下是’\’,Linux下是‘/’) |
os.linesep | 当前平台使用的行终止符(win:‘r\n\’Linux:’\n’) |
os.name | 指代当前使用的操作系统(‘nt’ ‘posix’ ‘mac’ ‘os2’ ‘ce’ ‘java’) |
- os.path模块常见函数:
函数形式 | 含义 |
---|---|
basename() | 去掉目录路径,单独返回文件名 |
dirname() | 去掉文件名,单独返回目录路径 |
join(path1[, path2[, …]]) | 将path1, path2各部分组合成一个路径名 |
split(path) | 分割文件名与路径,返回(f_path, f_name)元组。如果完全使用目录,它也会将最后一个目录作为文件名分离,且不会判断文件或者目录是否存在 |
splitext(path) | 分离文件名与扩展名,返回(f_name, f_extension)元组 |
getsize(file) | 返回指定文件的尺寸,单位是字节 |
getatime(file) | 返回指定文件最近的访问时间(浮点型秒数,可用time模块的gmtime()或localtime()函数换算) |
getctime(file) | 返回指定文件的创建时间(浮点型秒数,可用time模块的gmtime()或localtime()函数换算) |
getmtime(file) | 返回指定文件最新的修改时间(浮点型秒数,可用time模块的gmtime()或localtime()函数换算) |
exists(path) | 判断指定路径(目录或文件)是否存在 |
isabs(path) | 判断指定路径是否为绝对路径 |
isdir(path) | 判断指定路径是否存在且是一个目录 |
isfile(path) | 判断指定路径是否存在且是一个文件 |
islink(path) | 判断指定路径是否存在且是一个符号链接 |
ismount(path) | 判断指定路径是否存在且是一个挂载点 |
samefile(path1, paht2) | 判断path1和path2两个路径是否指向同一个文件 |