阅读 196

Phthon中文件相关知识

这是我参与8月更文挑战的第3天,活动详情查看:8月更文挑战

1、文件的基本操作

  • 文件打开的格式:

    • file = open(文件路径,读写模式)

      • 文件路径:可以写相对路径,也可以写绝对路径
      • 读写模式:r(读取) w(写入) a(追加)
  • 文件打开后,必须关闭,否则持续消耗服务器性能。

# 文件读写,在使用的时候和我们正常使用文件一样
# 1.打开文件
# 2.操作文件
# 3.关闭文件
​
# 打开文件使用open函数即可
# 格式: open(file_name(文件路径), mode(读写模式)) 使用该函数会返回一个文件对象
# 文件路径:可以写相对路径, 也可以写绝对路径,路径需要以字符串形式传入
# 读写模式: r(只读)  w(写入)  a()追加
file = open('python.txt', 'r')
print(file) # <_io.TextIOWrapper name='python.txt' mode='r' encoding='UTF-8'>  在windows中默认读写格式是gbk
print(type(file))  # <class '_io.TextIOWrapper'>
# 将读取出来的内容进行打印
print(file.read())
# 关闭文件
file.close()
​
# 为什么要关闭文件?
# 在文件打开状态是会保持连接,这种状态下会持续消耗内存,不利于服务器性能优化(内存泄漏)
​
# 关闭文件后,文件对象有没有被释放?
# 没有释放
print(file)  # <_io.TextIOWrapper name='python.txt' mode='r' encoding='UTF-8'>
# 文件关闭后,相当于与文件的连接状态消失了,但是文件对象没有发生变化
# 在文件关闭后,file对象不能进行任何读写操作,因为已经无法连接文件
# ValueError: I/O operation on closed file.  无法操作一个已经关闭的文件
print(file.read())
复制代码

2、文件的读取操作

  • read:如果()内填写数字,则读取指定字符的字符串,每次读取指定字符,在一个文件开启后,多次读取会持续向后读取字符,如果字符全部读取完成将会返回空字符串“”

    • 格式: 文件对象.read(单次最大读取字符数)
  • 如果读取的文件不存在则直接报错

# 文件在'r'模式下可以进行文件读取
# read 可以读取文件
​
# 打开文件
file = open('python.txt', 'r')
# 读取文件
# n:在read中传入数值,代表我们读取的最大字符数
# 如果开发中有一个文本文件,比如网络小说,4个G大小,一次性读取,用户依次读取这么大的文件,极度消耗性能,而且 等待时间过长
# 所以在开发中我们经常会给读取数据的值做一个限定,最大读取字符一般限定为(1024*1024)
​
# 那我们使用read只能依次读取3个字符,那省下的字符我们怎样读取呢?
# 文件每一次读取,都会持续向后读取,直到文件关闭或程序结束,所以可以使用循环进行读取
# 在所有的文件内容读取完成后,会持续返回空字符串("")
while True:
    content = file.read(3)
    if content == '':
        break
    print(content)
​
# 关闭文件
file.close()
复制代码
  • readline: 每次读取一行数据,以\n为分隔符,在一个文件开启后,多次执行读取操作会持续向后读取,如果字符全部被读取完成,则返回空字符串“”

    • 格式:文件对象.readline()
  • readlines:一次性将文件全部读取,读取后,将文字以一行为一个元素保存到列表当中进行返回

    • 文件对象.readlines()
# 除了read外还有一些读取方式
# 文件打开
file = open('python.txt', 'r')
# 文件操作
# readline  使用这种方式读取文件,每次读取一行以\n为分隔符,并且在文件打开状态下,会持续向下读取,直到所有文件被读取完成后,会读取空字符串""
# while True:
#     content = file.readline()
#     if content == '':
#         break
#     print(content,end='')
​
# readlines 读取所有的文件以\n为分隔符,将所有的行以字符串元素的方式保存到列表当中进行返回
# ['吴丝蜀桐张高秋\n', '空山凝云颓不流\n', '举头望明月\n', '低头思故乡\n']
content = file.readlines()
​
print(content)
# 文件关闭
file.close()
复制代码

3、文件的写入操作

  • 使用写入模式‘w’打开文件

    • 如果文件存在,则清空源数据
    • 如果文件不存在,则新建文件,不会报错
  • 使用write可以写入字符

  • 在windows电脑中书写文件读写时,需要使用encoding进行编码格式指定

    • 格式:open(文件路径, 读写模式, encoding = 编码格式)
# write 写入
# 当文件读写模式时 'w',可以使用文件的写入操作
# 当文件执行写入模式打开时,如果被打开的文件不存在,则重新创建一个新的文件,不会报错
# file = open('test.txt', 'w')
# 当文件执行写入模式打开时,如果被打开的文件存在,则会将源文件内的字符清空
# 如果使用windows电脑进行开发,在写入文件时,需要制定编码格式为'utf-8'
# 如果使用linux 或者mac 默认是utf-8编码 不需要转码
file = open('python.txt', 'w', encoding='utf-8')
# 当完成文件的读写操作时,我们写入文件  和读取文件所使用的编码格式必须一致
# UnicodeDecodeError: 'gbk' codec can't decode byte 0x89 in position 14: illegal multibyte sequence
print(file)  # <_io.TextIOWrapper name='python.txt' mode='w' encoding='UTF-8'>
# 写入操作
# file.write('我爱北京天安门,天安门上太阳升')
# 如果写入的字符串时三对引号包过内部的换行符会不会写入呢?  会写入格式
file.write("""
我爱北京天安门,
天安门上太阳升
""")
​
# writelines 是配合readlines进行使用的,可以将一个由字符串元素组成的列表一次性写入文件
# file.writelines('我爱北京天安门')
lines = ['吴丝蜀桐张高秋\n', '空山凝云颓不流\n', '举头望明月\n', '低头思故乡\n']
file.writelines(lines)
​
file.close()
复制代码

4、文件的追加操作

  • ‘a’:模式下进行文件打开

    • 如果文件不存在,则创建新文件
    • 如果文件存在,则在原有文件内进行字符串追加,不会清空源文件
  • 在追加模式下,也是使用write进行文件写入,没有单独的追加方法,写入方式和‘w’模式一致

# 'a'模式写入:追加模式
# 在追加模式下可以进行文件字符的追加,在原有数据的末尾添加 新的字符
# 在追加模式下打开文件,如果文件存在,则不会讲源文件清空
# file = open('python.txt', 'a', encoding='utf-8')
# 在追加模式下打开文件,如果文件不存在,则新建一个文件
# 打开文件
file = open('bigdata.txt', 'a', encoding='utf-8')
# 进行追加操作(注意:没有append方法,追加操作也是使用write进行写入,只不过不会清空源文件)
file.write('乱我心者今日之日多烦忧')
# 关闭文件
file.close()
复制代码

\

文章分类
阅读
文章标签