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

ゞ 浴缸里的玫瑰 2023-06-10 04:26 22阅读 0赞

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

    hello
    world
    !

对此文件进行读取操作,如下

  1. '''相对路径'''
  2. f=open('test.txt','r')
  3. fstr=f.read()
  4. print(fstr)
  5. ''' hello world ! '''
  6. f.close()
  7. '''绝对路径'''
  8. f=open(r'/Users/lql70/Desktop/VScode/python/Practise/test.txt','r')
  9. fstr=f.read()
  10. print(fstr)
  11. ''' hello world ! '''
  12. 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:

    1. print(s.strip())

    f.close()
    ‘’’ hello world ! ‘’’

  • 如果文件不存在,open()函数就会抛出一个IOError的错误
    由于文件读写时都有可能产生IOError,一旦出错,后面的f.close()就不会调用。所以,为了保证无论是否出错都能正确地关闭文件,我们可以使用try … finally来实现:

    try:

    1. f = open('test.txt', 'r')
    2. print(f.read())

    finally:

    1. if f:
    2. f.close()
  • 但是每次都这么写实在太繁琐,所以,Python引入了with语句来自动帮我们调用close()方法:

    with open(‘test.txt’, ‘r’) as f:

    1. print(f.read())

2.写文件

  • mode 参数





































模式 描述
r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式
t 文本模式。
x 写模式,新建一个文件,如果该文件已存在则会报错。
b 二进制模式。
+ 打开一个文件进行更新(可读可写,可添加到其他模式中)。
w 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
  1. f=open(r'/Users/lql70/Desktop/VScode/python/Practise/test.txt','a')
  2. f.write('\npython')
  3. f.close()
  4. f=open(r'/Users/lql70/Desktop/VScode/python/Practise/test.txt','r')
  5. fstr=f.read()
  6. print(fstr)
  7. f.close()
  8. ''' hello world ! python '''

二、文件系统

os 模块提供了非常丰富的方法用来处理文件和目录。

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

发表评论

表情:
评论列表 (有 0 条评论,22人围观)

还没有评论,来说两句吧...

相关阅读