python文件系统

一、标准库OS常用命令

命令 描述
os.getcwd() 得到当前工作的目录
os.listdir() 指定所有目录下所有的文件和目录名,以列表的形式返回
os.mkdir() 创建目录
os.rmdir() 删除指定目录
os.remove() 删除指定文件
os.rename() 修改文件或文件夹的名称
os.path.isfile() 判断指定对象是否为文件。是返回True,否则False
os.path.isdir() 判断指定对象是否为目录。是True,否则False。
os.path.exists() 检验指定的对象是否存在。是True,否则False.
os.path.split() 返回路径的目录和文件名。
os.chdir() 改变目录到指定目录
os.system() 执行shell命令
os.path.join(path, name) 连接目录和文件名
os.path.getsize() 获得文件的大小,如果为目录,返回0
os.path.basename(path) 返回文件名
os.path.abspath() 获得绝对路径
os.path.dirname(path) 返回文件路径

二、文件的打开与关闭

1、文件的概述

 文件是一个存储在辅助存储器上的数据序列,可以包含任何数据内容。概念上,文件是数据的集合和抽象,类似地,函数是程序的集合和抽象。用文件形式组织和表达数据更有效也更为灵活。文件包括两种类型:文本文件和二进制文件。
 二进制文件直接由比特0和比特1组成,没有统一字符编码,文件内部数据的组织格式与文件用途有关。进制文件和文本文件最主要的区别在于是否有统一的字符编码。无论文件创建为文本文件或者二进制文件,都可以用“文本文件方式"和“二进制文件方式"打开,打开后的操作不同。

2、文件的打开

  • open() 打开文件
    语法为:open(file, mode=‘r’, buffering- -1)
    参数file一般为文件的路径名;参数mode用于设置文件的打开模式,默认值为"r”,表示以只读模式打开文件;参数buffering用于 设置访问文件时采用的缓冲方式,默认值为-1, 表示采用系统默认的缓冲机制。若使用open()方法成功打开文件,则返回一个文件流,否则设置errno.
· open() 函数提供7种基本的打开模式
打开模式 含义
‘r’ 只读模式,如果文件不存在,返回异常FileNotFoundError
‘w’ 默认值覆盖写模式,文件不存在则创建,存在则完全覆盖源文件
‘x’ 创建写模式,文件不存在则创建,存在则返回异常FileExistsError
‘a’ 追加写模式,文件不存在则创建,存在则在原文件最后追加内容
‘b’ 二进制文件模式
’ t’ 文本文件模式,默认值
‘+’ 与r/w/x/a一同使用,在原功能基础上增加同时读写功能
  • 打开非utf-8编码的文件
    要读取非UTF-8编码的文本文件,需要给open()函数传入encoding参数,例如,读取GBK编码的文件:
f = open( 'b.txt',' r',encoding= 'gbk' )
f.read()

遇到有些编码不规范的文件,你可能会遇到UnicodeDecodeError ,因为在文本文件中可能夹杂了一些非法编码的字符。遇到这种情况, open()函数还接收一个errors参数 ,表示如果遇到编码错误后如何处理。最简单的方式是直接忽略:
f = open( /users/michael/gbk.txt', 'r', encoding= 'gbk',errors= ' ignore' )

  • 打开二进制文件
    前面讲的默认都是读取文本文件,并且是UTF-8编码的文本文件。要读取二进制文件 ,比如图片、视频等等,用’rb’模式打开文件即可:
f = open('c.jpg', 'rb' )
f.read()
b'\xff\xd8\xff\xe1\x00\x18Exif\x00\x00...' #十六进制表示的字节

3、文件的关闭

 程序执行完毕后,系统会关闭由该程序打开的文件,但更好的做法,是在文件使用完毕后,由程序调用close()方法关闭文件。

 实际上,计算机中可打开的文件数量是有限的,每打开一个文件,就会占用一个“名额”,当该“名额”耗尽后,系统将无法再打开新的文件。此外,当文件以缓冲方式打开时,磁盘文件与内存间的读写并不是即时的,若程序因异常关闭,可能导致缓冲区中的数据无法写入文件,造成数据丢失。

 综上所述,在文件使用完毕后,及时使用close()函数关团文件是有必要的。

  • f.close() 关闭文件

示例如下:

f = open('a.txt','w')  #以w方式打开一个不存在的文件,会创建此文件)
f.close()   #关闭文件

三、文件的读与写

1、文件的读取

  • f.read()读取全部文件内容
  • read(size)从指定文件中读取指定字节的数据
  • readlines()按行读取
#读取b文件的全部内容
f = open(' b. txt','w')
f. read ()
#从指定文件中读取指定字节的数据
>>> f = open("./a.txt")
>>> f.read(5)    #从a. txt中湊取5个字节
'hello'
>>> f. read(3)    #从a. txt中奬取3个字节
' it'
>>> f.read()  #湊取剩余的全部数据
'heima. \nhello itcast. hello world.'
>>> f. read()   #再次调用,读取到的数据为空

#按行读取
>>>f. readline() 
'Hello World1111\n'
>>>f. readline()
'222222\n'
>>>f. readline ()
''

2、文件的写

  • write(str)其中str表示要写入文件中的字符串。若调用成功则返回本次写入文件中的字节数。
>>> f = open('a.txt','w') #要写入内容,必须要先打开文件
>>> f.write("hello itheima. \n")
15      #本次写入文件的字节数>
>>> f.write("hello itcast." )
13      #本次写入文件的字节数
>>> f.write("hello world.")
12     #本次写入文件的字节数
>>>f.close()    #关闭文件

●你可以反复调用write()来写入文件,但是务必要调用f.close0来关闭文件。
●当我们写文件时,操作系统往往不会立刻把数据写入磁盘,而是放到内存缓存起来,空闲的时候再慢慢写入。
●只有调用close()函数时,操作系统才保证把没有写入的数据全部写入磁盘。忘记调用close()的后果是数据可能只写了一部分到磁盘,剩下的丢失了。所以,还是用with语句来得保险:

with open('test.txt','w') as f:
	f.write('hello world!')

三、tell与seek

1、 f.tell()

用户可通过tell()函数获取当前的读写位置,以操作文件a.txt为例,tell()的用法如下:

>>>f = open("a.txt")
>>>f.tell()
0
>>>f.read(5)
'hello'
>>>f.tell()
5
>>>f.close()

由以上示例可知,打开一个文件后,文件默认的读写位置为0;当对文件进行操作后,文件的读写位置也随之移动。

2、f.seek()

一般情况下,文件的读写是顺序的,但并非每次读写都需从当前位置开始。Python提供了seek()方法,使用该方法可控制文件的读写位置,实现文件的随机读写。
语法为:seek(offset, from)
其中参数offset表示偏移量,即读写位置需要移动的字节数; from用于指定文件的读写位置,该参数的取值为: 0. 1、2,它们代表的含义分别如下:
0:表示文件开头
1:表示使用当前读写位置
2:表示文件末尾

你可能感兴趣的:(python文件系统)