Python基础刻意练习——Day9&10:文件与文件系统
Day1:变量、运算符与数据类型
Day2:条件与循环
Day3&4:列表与元组
Day5:字符串与序列
Day6&7:函数与Lambda表达式
Day8:字典与集合
Day9&10:文件与文件系统——>本文
Day11:异常处理
Day12:else 与 with 语句
Day13&14:类与对象
Day15&16:魔法方法
Day17:模块
一、文件
读写文件是最常见的IO操作。Python内置了读写文件的函数,用法和C是兼容的。
读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)。
1.读文件
要以读文件的模式打开(或创建)一个文件对象,可使用Python内置的open()函数
- open() 函数常用形式是接收两个参数:文件名(file)和模式(mode)
- 注意,使用 open() 方法一定要保证关闭文件对象,即调用 close() 方法。
- 完整的语法格式为:
open(file, mode=‘r’, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
参数说明:
file: 必需,文件路径(相对路径或者绝对路径)。
mode: 可选,文件打开模式
buffering: 设置缓冲
encoding: 一般使用utf8
errors: 报错级别
newline: 区分换行符
closefd: 传入的file参数类型
opener: - 如果文件打开成功,接下来,调用read()方法可以一次读取文件的全部内容,Python把内容读到内存,用一个str对象表示
最后一步是调用close()方法关闭文件。
文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的
在同一文件夹下建立一test.txthello
world
!
对此文件进行读取操作,如下
'''相对路径'''
f=open('test.txt','r')
fstr=f.read()
print(fstr)
''' hello world ! '''
f.close()
'''绝对路径'''
f=open(r'/Users/lql70/Desktop/VScode/python/Practise/test.txt','r')
fstr=f.read()
print(fstr)
''' hello world ! '''
f.close()
调用read()会一次性读取文件的全部内容,若文件过大,内存可能会不够用,所以,要保险起见,可以反复调用read(size)方法,每次最多读取size个字节的内容。
f=open(r’/Users/lql70/Desktop/VScode/python/Practise/test.txt’,’r’)
fstr1=f.read(2)
fstr2=f.read(2)
print(fstr1,fstr2)he ll
f.close()
调用readline()可以每次读取一行内容
调用readlines()一次读取所有内容并按行返回list
f=open(r’/Users/lql70/Desktop/VScode/python/Practise/test.txt’,’r’)
fstr1=f.readline().strip() #去掉文件中的\n
fstr2=f.readline().strip()
print(fstr1,fstr2)hello world
f.close()
f=open(r’/Users/lql70/Desktop/VScode/python/Practise/test.txt’,’r’)
fstr=f.readlines()
for s in fstr:print(s.strip())
f.close()
‘’’ hello world ! ‘’’如果文件不存在,open()函数就会抛出一个IOError的错误
由于文件读写时都有可能产生IOError,一旦出错,后面的f.close()就不会调用。所以,为了保证无论是否出错都能正确地关闭文件,我们可以使用try … finally来实现:try:
f = open('test.txt', 'r')
print(f.read())
finally:
if f:
f.close()
但是每次都这么写实在太繁琐,所以,Python引入了with语句来自动帮我们调用close()方法:
with open(‘test.txt’, ‘r’) as f:
print(f.read())
2.写文件
- mode 参数
模式 | 描述 |
---|---|
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
t | 文本模式。 |
x | 写模式,新建一个文件,如果该文件已存在则会报错。 |
b | 二进制模式。 |
+ | 打开一个文件进行更新(可读可写,可添加到其他模式中)。 |
w | 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
f=open(r'/Users/lql70/Desktop/VScode/python/Practise/test.txt','a')
f.write('\npython')
f.close()
f=open(r'/Users/lql70/Desktop/VScode/python/Practise/test.txt','r')
fstr=f.read()
print(fstr)
f.close()
''' hello world ! python '''
二、文件系统
os 模块提供了非常丰富的方法用来处理文件和目录。
import os
可用os.name获取操作系统类型
如果是posix,说明系统是Linux、Unix或Mac OS X
如果是nt,就是Windows系统。print(os.name)
posix
可用getcwd获取当前工作目录
用chair(path)改变工作目录print(os.getcwd())
/Users/lql70/Desktop/VScode/python/Practise
用listdir(path)列举指定目录下的文件名
print(os.listdir(‘/Users/lql70/Desktop/VScode/python/Practise’))
[‘2.py’, ‘3.py’, ‘1.py’, ‘test.txt’]
用mkdir(path)建立新目录
用makedirs(path)建立新的多层目录import os
os.mkdir(‘/Users/lql70/Desktop/VScode/python/Practise/try’)
print(os.listdir(‘/Users/lql70/Desktop/VScode/python/Practise’))[‘2.py’, ‘3.py’, ‘1.py’, ‘try’, ‘test.txt’]
用remove(path)删除指定文件
import os
os.remove(‘/Users/lql70/Desktop/VScode/python/Practise/test.txt’)
print(os.listdir(‘/Users/lql70/Desktop/VScode/python/Practise’))[‘2.py’, ‘3.py’, ‘1.py’]
其他操作
函数名 | 作用 |
---|---|
rmdir(path) | 删除目录 |
removedirs(path) | 删除多层目录 |
rename(src, dst) | 重命名文件或目录,从 src 到 dst |
system(commend) | 运行系统的shell命令 |
curdir() | 指代当前工作目录,相当于’ . ’ |
pardir() | 指代上一级目录,相当于’. .’ |
basename(path) | 去掉目录路径,只保留文件名 |
dirname(path) | 去掉文件名,只保留目录路径 |
getsize(file) | 返回指定文件尺寸,单位字节 |
getatime(file) | 返回指定文件最近访问时间(浮点型秒,用time模块的localtime()换算,下同) |
getctime(file) | 返回指定文件创建时间 |
getmtime(file) | 返回指定文件最近修改时间 |
exists(path) | 返回指定路径(目录或文件)是否存在 |
还没有评论,来说两句吧...