标准库os常用命令
由于文件操作的基础的是建立在操作系统上面完成的,所以我们先来学习一下os标准库
#导入os库
import os
- os.getcwd()
获取当前目录,查看当前工作路径 - os.chdir()
修改当前目录到指定目录中(一般我们对文件操作都是指定文件夹下面进行) - os.mkdir()
创建一个新目录(文件夹)在当前工作路径下,如果已存在则会报错。 - os.rmdir()
在当前工作路径下面删除空文件夹,当要删除的文件不存在时,也会报错。 - os.listdir()
以列表的形式返回指定目录下的所有目录和文件 - os.name
获取当前使用的操作系统【Windows是NT内核,返回nt;Linux/Unix返回posix】 - os.remove()
删除指定文件 - os.removedirs()
删除指定目录 - os.sep()
获得当前操作系统使用的目录分隔符【Windows 得到\,而 Linux/Unix 10. 得到/】 - os.getenv()
获得环境变量 - os.environ()
获得并修改环境变量
路径操作(os.path)
函数 | 解释 |
---|---|
os.path.abspath(path) | 返回绝对路径 |
os.path.basename(path) | 返回文件名,最后的文件路径 |
os.path.commonprefix(list) | 返回列表(多个路径)中,所有path共有的最长的路径 |
os.path.dirname(path) | 返回目录路径 |
os.path.exists(path) | 路径存在返回True,否则False |
os.path.lexists | 路径存在返回True,路径损坏返回False |
os.path.expanduser(path) | 把path中包含的 ~ 和 ~user转换成用户目录 |
os.path.expandvars(path) | 根据环境变量的值替换path中包含的” $ name"和 “ ${name}" |
os.path.getatime(path) | 返回最后一次进入此path的时间(access) |
os.path.getmtime(path) | 返回在此path下最后一次修改的时间(modify) |
os.path.getctime(path) | 返回path的大小(create) |
os.path.getsize(path) | 返回文件大小,以字节为单位,如果文件不存在就返回错误 |
os.paht.isabs(path) | |
os.path.isfile(path) | 判断path所对应的是否是已存在的文件,返回布尔类型 |
os.path.isdir(path) | 判断path所对应的是否是已存在的目录,返回布尔类型 |
os.path.islink(path) | |
os.path.ismount(path) | |
os.path.join(path1[,path2[,…]]) | 组合path1,2返回一个字符串 |
os.path.normcase(path) | 转换path的大小写和斜杠 |
os.path.normpath(path) | 规范path字符串形式,统一用\分割路径 |
os.path.realpath(path) | |
os.path.relpath(path[,start]) | 从start开始计算,返回当前程序与文件之间的相对路径 |
os.path.samefile(path1,path2) | |
os.path.samestat(stat1,stat2) | 判读stat tuple stat1 和stat2是否指向同一个文件 |
os.path.sameopenfile(fp1,fp2) | |
os.path.split(path) | 把路径分割成dirname和basename,返回一个元组 |
os.path.splitdriver(path) | 一般在windows下,返回驱动器名和路径组成的元祖 |
os.path.splitunc(path) | 把路径分割为加载点与文件 |
os.path.walk(path,visit,arg) | 遍历path,进入每个目录都调用visit函数,visit必须有三个参数(arg,dirname,names),dirname表示当前目录的目录名,names代表当前目录下所有的文件名,args则为walk的第三个参数 |
os.path.supports_unicode_filenames | 设置是否支持unicode路径名 |
文件的打开与关闭
文件概述
文件是一个存储在辅助存储器上的数据序列,可以包含任何数据内容。概念上,文件是数据的集合和抽象,类似地,函数是程序的集合和抽象。用文件形式组织和表达数据更有效也更为灵活。文件包括两种类型:文本文件和二进制文件。
二进制文件直接由比特0和比特1组成,没有统一字符编码,文件内部数据的组织格式与文件用途有关。二进制文件和文本文件最主要的区别在于是否有统一的字符编码无论文件创建为文本文件或者二进制文件,都可以用 “文本文件方式”和“二进制文件方式”打开,打开后的操作不同。
文件打开f.open()
python中可通过内置方法open()打开文件,open()方法的声明如下:
open(file, mode = 'r', buffering = -1)
file为文件的路径名,mode用于设置文件打开模式,buffering用于设置访问文件时采用的缓冲方式,默认值为-1,表示采用系统默认的缓冲机制(如果用open()方法成功打开文件则返回一个文件流,否则设置error)如果设置为0,则表示采用非缓冲方式;若设置为1,则表示每次缓冲一行数据;若设置大于1,则表示使用给定值作为缓冲区大小;如果为负值或者缺省,则表示默认
打开模式 | 含义 |
---|---|
r | 以只读方式打开文件,文件的指针将会放在文件的开头(默认模式)如果不存在返回FileNotFoundError |
w | 覆盖写模式,如果该文件已存在则将其覆盖;如果该文件不存在,创建新文件。 |
a | 追加写模式,如果该文件已存在,文件指针将会放在文件的结尾,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
b | 二进制文件模式 |
t | 文本文件模式,默认值 |
+ | 与r/w/x/a一同使用,在原功能的基础上增加同时读写功能 |
文件关闭f.close()
程序执行完毕后,系统会关闭由该程序打开的文件,但更好的做法是在文件使用完毕后,由程序调用close()方法关闭文件。
实际上,计算机中可打开的文件数量是有限的,每打开一个文件,就会占用一个“名额”,当该“名额”耗尽后,系统将无法再打开新的文件,此外,当文件以缓冲方式打开时,磁盘文件与内存间的读写并不是即时的,若程序因异常关闭,可能导致缓冲区的数据无法写入文件造成数据丢失。因此,在文件使用完毕后,即时使用close()函数关闭文件是有必要的。
另外,文件读写时产生IOError后面的f.close()就不会调用
其他关于文件操作的介绍
- f.read()
调用该函数会一次性读取文件的全部内容(如果文件很大,10G,内存就爆了。所有保险起见,反复调用read(size)每次最多读取size个字节的内容)读完一次后,文件指针位于文档最后,再次读内容为空;关闭后再打开时,指针又回到文档起点。 - f.redline()/f.readlines()
前者每次读取一行内容,后者一次读取所有内容并按行返回list(tip:如果文件很小,read()一次性读取最方便;如果不能确定文件大小,反复调用read(size)比较保险;如果是配置文件,调用readlines()最方便) - f.tell()
通过该函数获取当前的读写位置,在文件每次打开与关闭间进行的读写操作都是连续的,打开一个文件,文件默认的读写位置为0;当对文件进行读操作后,文件的读写位置也随之移动。 - f.seek()
一般情况下,文件的读写是顺序的,但并非每次读写都需从当前位置开始,该函数可控制文件的读写位置,实现文件的随机读写。
seek(offset, from)
offset表示偏移量,即读写位置需要移动的字节数;from用于指定文件的读写位置,该参数的取值即含义为:
- 0:表示文件开头
- 1:表示使用当前读写位置
- 2:表示文件末尾
文件的其他属性与方法
分类 | 名称 | 功能 |
---|---|---|
方法 | fileno() | 返回底层文件的文件描述 |
方法 | flush() | 清空文件对象,将缓存中的内容写入磁盘 |
方法 | readable() | 若文件对象已打开且等待读取,则返回True,否则返回False |
方法 | seekable() | 若文件支持随机存取,则返回True,否则返回False |
方法 | truncate(size) | 截取文件到当前文件读写位置,若给定size则截取为size大小 |
方法 | __ next __() | 返回文件对象的下一行 |
属性 | mode | 获取文件对象的打开模式 |
属性 | name | 获取文件对象的文件名 |
属性 | encoding | 获取文件使用的编码格式 |
属性 | closed | 若文件已关闭则返回True,否则返回False |