Python基础刻意练习——Day9&10:文件与文件系统

一、文件

读写文件是最常见的IO操作。Python内置了读写文件的函数,用法和C是兼容的。

读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)。

1.读文件

要以读文件的模式打开(或创建)一个文件对象,可使用Python内置的open()函数

  • open() 函数常用形式是接收两个参数:文件名(file)模式(mode)

完整的语法格式为:

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.txt

hello
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)返回指定路径(目录或文件)是否存在

附:python基础系列

Day1:变量、运算符与数据类型
Day2:条件与循环
Day3&4:列表与元组
Day5:字符串与序列
Day6&7:函数与Lambda表达式
Day8:字典与集合
Day9&10:文件与文件系统——>本文
Day11:异常处理
Day12:else 与 with 语句
Day13&14:类与对象
Day15&16:魔法方法
Day17:模块

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值