读写文件就是请求操作系统打开一个文件对象,然后通过操作系统提供的接口从这个文件对象中读取数据,或把数据写入这个文件对象
    一、读取文件
    Python中通过内置的 open( )函数来读取文件

    1. f = open('/Users/jie/Downloads/测试文件1.txt','r',encoding='utf-8')

    open( ) 中传入要打开的”文件地址+文件名”,以及标示符’r’(r,表示只读)
    通过 read( ) 函数对打开的文件进行内容全部的读取,文件内容以str对象放入内存中

    1. f.read()
    2. print(f.read()) # 欢迎来到精创学习!
    3. print(type(f.read())) # <class 'str'>

    读取完文件后,我们需要通过 close( ) 函数把文件进行关闭,文件使用完后需要被关闭,因为文件对象会占用系统资源,并且系统同一时间能打开的文件数量是有限制的

    1. f.close() # 调用close()函数来关闭打开的文件来释放被占用的系统资源

    通过上述代码,我们来结合try…except…finally来完成文件的打开-读取-关闭

    1. def read_file(file_name='/Users/jie/Downloads/测试文件1.txt'):
    2. f = None
    3. try:
    4. f = open(file_name,'r',encoding='utf-8')
    5. r = f.read()
    6. print(r)
    7. except:
    8. print("文件读取异常!")
    9. finally:
    10. if f:
    11. f.close()
    12. print('关闭打开的文件')
    13. s = read_file()

    这里定义了一个了函数 read_file(file_name) 来实现文件读取功能,函数中,给变量f默认值为None, 目的在于程序一执行就会自动创建变量f,供下面try: 和 finally: 语句调用;
    问题:上述代码为什么要在一开始就定义变量: f 呢?

    Python中 read( ) 函数会一次性读取文件的全部内容到内存中,试设想,如果这个文件非常庞大,那么内存就会溢出,因此在调用read( ) 函数读取文件时,要注意读取对象数据量,如果想按行读取可调用 readline( ),这样每次读取一行;调用 read(size) 方法,每次读取 size 个字节的内容,还有 readlines( ) 也是一次读取所有内容,但是按行读取,返回一个list,所以读取文件时要根据实际灵活运用上面三个函数。
    readline( )

    1. def read_file(file_name='C:\\Users\\37210\\Desktop\\测试文件1.txt'):
    2. f = None
    3. try:
    4. f = open(file_name,'r',encoding='utf-8')
    5. while f:
    6. r = f.readline()
    7. if r:
    8. print(r)
    9. else:
    10. break
    11. except BaseException as e:
    12. print("文件读取异常!")
    13. print(e)
    14. finally:
    15. if f:
    16. f.close()
    17. print('关闭打开的文件')
    18. s = read_file()
    19. 这是文本第1行。
    20. 这是文本第2行。
    21. 这是文本第3行。
    22. 关闭打开的文件

    readline()方法每次读取一行;返回的是一个字符串对象,保持当前行的内存;即通过循环按行读取。
    readlines( )

    1. def read_file(file_name='C:\\Users\\37210\\Desktop\\测试文件1.txt'):
    2. f = None
    3. try:
    4. f = open(file_name,'r',encoding='utf-8')
    5. r = f.readlines()
    6. print(r) # ['这是文本第1行。\n', '这是文本第2行。\n', '这是文本第3行。\n']
    7. for i in r: # 通过循环遍历这个list
    8. print(i)
    9. except BaseException as e:
    10. print("文件读取异常!")
    11. print(e)
    12. finally:
    13. if f:
    14. f.close()
    15. print('关闭打开的文件')
    16. s = read_file()
    17. ['这是文本第1行。\n', '这是文本第2行。\n', '这是文本第3行。\n']
    18. 这是文本第1行。
    19. 这是文本第2行。
    20. 这是文本第3行。
    21. 关闭打开的文件

    readlines( ) 方法一次性读取全部内容到内存,每一行字符串作为一个元素,返回一个list,可通过for循环来遍历这个list,获取每行内容
    上述返回结果

    1. ['这是文本第1行。\n', '这是文本第2行。\n', '这是文本第3行。\n']

    列表中每个元素都包含一个’\n’,即回车符,导致输出结果含有空行,这里可使用 replace( ) 函数来处理

    1. for i in r:
    2. i = i.replace('\n','') # 通过replace把'\n'替换成'',达到去除'\n'的目的
    3. print(i)
    4. 这是文本第1行。
    5. 这是文本第2行。
    6. 这是文本第3行。
    7. 关闭打开的文件

    任务:分别通过read( ) 、readline( ) 、readlines( ) 对文本完成打开-读取-关闭
    任务:通过replace( ) 函数,把读取到的字符串中’。’代替为’!’

    二、通过 with open …as…语句来打开一个文件
    上述读取一个文件的操作是 :open-read-close,通过 with open 可简化步骤:with open-read
    通过 with 关键字,当文件读取完毕,程序会自动关闭文件,无需调用 close( ) 函数

    1. def read_file(file_name='C:\\Users\\37210\\Desktop\\测试文件1.txt'):
    2. try:
    3. with open(file_name,'r',encoding='utf-8') as f:
    4. r = f.readlines()
    5. print(r)
    6. for i in r:
    7. i = i.replace('\n','')
    8. print(i)
    9. except BaseException as e:
    10. print("文件读取异常!")
    11. print(e)
    12. if f.closed: # 通过调用 f.closed 来判断打开的文件是否已关闭,已关闭返回True,否则返回False
    13. print('文件已关闭')
    14. s = read_file()
    15. ['这是文本第1行。\n', '这是文本第2行。\n', '这是文本第3行。\n']
    16. 这是文本第1行。
    17. 这是文本第2行。
    18. 这是文本第3行。
    19. 文件已关闭

    任务:通过 whit open…as… 来改造上述代码的 read( ) 、readline( )

    二、写入文件
    写入文件的时open函数中 ‘r’ 改成 ‘w’,通过 f.write(要写入的内容) 来对文件进行写入操作,同样需要close( )函数来关闭打开的文件

    1. def read_file(file_name='C:\\Users\\37210\\Desktop\\测试文件1.txt'):
    2. f = None
    3. try:
    4. f = open(file_name,'w',encoding='utf-8')
    5. w = f.write('写入第一句话。')
    6. except BaseException as e:
    7. print("写入文件异常!")
    8. print(e)
    9. finally:
    10. if f:
    11. f.close()
    12. print('关闭打开的文件')
    13. s = read_file()

    此时打开’C:\Users\37210\Desktop\测试文件1.txt’文件,会发现文件中存在的是“写入第一句话。”字符串
    通过 with open … as…来简化

    1. def read_file(file_name='C:\\Users\\37210\\Desktop\\测试文件1.txt'):
    2. try:
    3. with open(file_name,'w',encoding='utf-8') as f:
    4. f.write('写入第二句话。')
    5. except BaseException as e:
    6. print("写入文件异常!")
    7. print(e)
    8. s = read_file()

    同样通过 with open … as ..来写入文件,可以省略close( )方法,上述通过参数 ‘w’ 来写入会直接覆盖原文件,把 ‘w’ 改成 ‘a’ 就可以实现追加的方式写入

    1. def read_file(file_name='C:\\Users\\37210\\Desktop\\测试文件1.txt'):
    2. try:
    3. with open(file_name,'a',encoding='utf-8') as f: # 以追加的方式写入
    4. f.write('写入第二句话。')
    5. except BaseException as e:
    6. print("写入文件异常!")
    7. print(e)
    8. s = read_file()
    9. 写入第一句话。写入第二句话。

    打开’C:\Users\37210\Desktop\测试文件1.txt’文件,文件中:“写入第一句话。写入第二句话。”
    如果,在写入操作时,file_name不存在,则程序会自动创建这个名称的文件,并写入数据。

    任务:在桌面创建一个新的空文本文件,分别通过 open…write…close 的方式写入一句话
    任务:对上一任务通过 with open…as… 来改造简化
    任务:结合上一任务,以追加的形式写入