极简Python语法(9)

12、文件及目录操作

  在变量、序列和对象中存储的数据是暂时的,程序结束后就会丢失。为了能够长时间地保存程序中的数据,需要将程序中的数据保存到磁盘文件中。Python提供了内置的文件对象和对文件,以及目录进行操作的内置模块。

12.1 基本文件操作

  在Python中,内置了文件(File)对象。使用open()函数打开文件,可以使用文件对象的write()方法向文件中写入内容,以及使用close()方法关闭文件等。

12.1.1 创建和打开文件

  使用open()函数打开文件,基本语法格式为:

file = open(filename[,mode,[,buffering]])

mode参数的参数说明:

在这里插入图片描述

1. 打开一个不存在的文件时先创建该文件

  一般情况,用open()一个不存在的文件,会报错。所以,在调用open()函数时,指定mode的参数值为w、w+、a、a+。这样,当要打开的文件不存在时,就可以创建新的文件了。

print('\n','=' * 10, '蚂蚁庄园动态', '=' * 10)
file = open('message.txt', 'w')
print('\n 即将展示.....\n')

'''
========== 蚂蚁庄园动态 ==========

即将展示.....
'''
2. 以二进制形式打开文件

  open()函数不仅可以以文本的形式打开文本文件,而且可以以二进制形式打开非文本文件,如图片文件、音频文件、视频文件等。

f = open('bjut.jpg', 'rb')
print(f)
'''
<_io.BufferedReader name='bjut.jpg'>
'''
3.打开文件时指定编码方式

  在使用open()函数打开文件时,默认采用GBK编码,否则就会被报错。在调用open()函数时,通过添加encoding='utf-8'参数即可实现将编码指定为UTF-8。例如,打开采用UTF-8编码保存的notice.txt文件,可以使用下面的代码。

file = open('notive.txt', 'r', encoding = 'utf-8')

12.1.2 关闭文件

  打开文件后,需要及时关闭,以免对文件造成不必要的破坏。关闭文件可以使用文件对象的close()方法实现。

print('\n','=' * 10, '蚂蚁庄园动态', '=' * 10)
file = open('message.txt', 'w')
print('\n 即将展示.....\n')

file.close()

12.1.3 打开文件时使用with语句

  如果打开文件时抛出了异常,将导致文件不能被及时关闭。则使用Python提供的with语句。

print('\n','=' * 10, '蚂蚁庄园动态', '=' * 10)
with open('message.txt', 'w') as file: # 创建或者打开蚂蚁庄园动态信息的文件
    pass # 不执行任何操作
print('\n 即将展示.....\n')

12.1.4 写入文件内容

  Python的文件对象提供了write()方法,可以向文件中写入内容。

print('\n','=' * 10, '蚂蚁庄园动态', '=' * 10)
file = open('message.txt', 'w')
file.write('你使用了一张加速卡,小鸡撸起袖子开始双手吃饲料,进食速度大大加快。\n')
print('\n 写入了一条动态。。。。。。\n')

file.close()

'''
你使用了一张加速卡,小鸡撸起袖子开始双手吃饲料,进食速度大大加快。
'''

  写入文件后,一定要用close()方法关闭,否则不会被成功写入。

  向文件中写入内容时,如果打开文件采用w(写入)模式,则先清空原文件的内容,再写入新的内容;如果想追加内容,使用a(追加)模式:

print('\n','=' * 10, '蚂蚁庄园动态', '=' * 10)
file = open('message.txt', 'a')
file.write('mingri的小鸡在你的庄园待了22分钟,吃了6g的饲料之后,被你赶走了。\n')
print('\n 追加了一条动态。。。。。。\n')

file.close() # 关闭了文件的对象
'''
你使用了一张加速卡,小鸡撸起袖子开始双手吃饲料,进食速度大大加快。
mingri的小鸡在你的庄园待了22分钟,吃了6g的饲料之后,被你赶走了。
'''

12.1.5 读取文件

1. 读取指定字符

  文件对象提供了read()方法读取指定个数的字符。例如,要读取message.txt文件中的前9个字符:

print('\n','=' * 10, '蚂蚁庄园动态', '=' * 10)
with open('message.txt', 'r') as file:
    str = file.read(9)
    print(str)

file.close() # 关闭了文件的对象
'''
 ========== 蚂蚁庄园动态 ==========
你使用了一张加速卡
'''

  使用read(size)方法读取文件时,是从文件的开头读取的。如果想要读取部分内容,可以先使用文件对象的seek()方法将文件的指针移动到新的位置,然后再应用read(size)方法读取。

print('=' * 10, '蚂蚁庄园动态', '=' * 10)
with open('message.txt', 'r') as file:
    file.seek(12) # 从第12个字符开始 # 注意一个汉字占用2个字符 英文和数字各占1个字符
    str = file.read(23) # 读取23个字符 # read()函数 均占用一个字符
    print(str)
file.close() # 关闭了文件的对象
'''
========== 蚂蚁庄园动态 ==========
加速卡,小鸡撸起袖子开始双手吃饲料,进食速度大
'''

  file.read()表示读取文件中的所有内容。

print('=' * 10, '蚂蚁庄园动态', '=' * 10)
with open('message.txt', 'r') as file:
    str = file.read()
    print(str)
file.close() # 关闭了文件的对象
'''
========== 蚂蚁庄园动态 ==========
你使用了一张加速卡,小鸡撸起袖子开始双手吃饲料,进食速度大大加快。
mingri的小鸡在你的庄园待了22分钟,吃了6g的饲料之后,被你赶走了。
'''
2. 读取一行

  文件对象提供了readline()方法用于每次读取一行数据。

print('=' * 35, '蚂蚁庄园动态', '=' * 35, '\n')
with open('message.txt', 'r') as file:
    number = 0
    while True:
        number += 1
        line = file.readline()
        if line == '':
            break
        print(number, line, end = '\n')
print('\n', '=' * 35, 'over', '=' * 35, '\n')
file.close() # 关闭了文件的对象
'''
=================================== 蚂蚁庄园动态 =================================== 

1 你使用了一张加速卡,小鸡撸起袖子开始双手吃饲料,进食速度大大加快。

2 mingri的小鸡在你的庄园待了22分钟,吃了6g的饲料之后,被你赶走了。

3 你的小鸡在QQ庄园里待了22分钟,吃了8g饲料,被庄园主人赶了回来。

4 你使用了一张加速卡,小鸡撸起袖子开始双手吃饲料,进食速度大大加快。

5 CC来到了你的庄园,并提醒你无语的小鸡已经偷吃了饲料21分钟,吃掉了6g,你的小鸡拿出了10g饲料奖励给CC。


 =================================== over =================================== 

'''
3. 读取全部行

  读取全部行,使用的是文件对象的readlines()方法,返回的是一个字符串列表:

  下面的代码将读取的列表中的内容,换行打印了出来:

print('=' * 35, '蚂蚁庄园动态', '=' * 35, '\n')
with open('message.txt', 'r') as file:
    message = file.readlines()
    for line in message: # 不换行 就是列表的形式
        print(line)
print('\n', '=' * 35, 'over', '=' * 35, '\n')
file.close() # 关闭了文件的对象
'''
=================================== 蚂蚁庄园动态 =================================== 

你使用了一张加速卡,小鸡撸起袖子开始双手吃饲料,进食速度大大加快。

mingri的小鸡在你的庄园待了22分钟,吃了6g的饲料之后,被你赶走了。

你的小鸡在QQ庄园里待了22分钟,吃了8g饲料,被庄园主人赶了回来。

你使用了一张加速卡,小鸡撸起袖子开始双手吃饲料,进食速度大大加快。

CC来到了你的庄园,并提醒你无语的小鸡已经偷吃了饲料21分钟,吃掉了6g,你的小鸡拿出了10g饲料奖励给CC。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值