第十一天 第十章 文件操作

# 想要操作文件,首先要创建或者打开指定的文件并创建文件对象:file = opend(filename[,mode[,buffering]])
#   file:被创建的文件对象
#   filename:要创建或打开文件的文件名
#   mode:可选参数,用于指定文件的打开模式,默认是只读‘r’
# r:只读,文件指针在文件开头
# rb:二进制模式打开文件,并采用只读模式,一般用于图片、声音等
# r+:可以读,也可以写(覆盖原内容)
# rb+:二进制的读写模式
# w:只写模式打开文件
# wb:二进制格式打开文件,只写模式,一般用于图片、声音等
# w+:打开文件后,先清空文件内容,然后再读写
# wb+:二进制模式打开文件,采用读写模式
# a:以追加模式打开文件,文件指针在文件的末尾,否则创建新文件用于写入
# ab:二进制追加模式
# a+:以读写模式打开文件,文件指针在文件末尾
# ab+:二进制读写模式打开文件,指针在文件末尾
#   buffering:可选参数,指定读写文件的缓冲模式,0为不缓存;1为缓存;如果大于1则表示缓存区的大小;默认为缓存模式。


# 打开一个不存在的文件需要用w/w+/a/a+这些打开模式,否则会报错
print('='*10,'蚂蚁庄园','='*10)
file = open('message.txt','r')
print('即将显示...')


# 以二进制形式打开文件
file = open('demo.jpg','rb')
print(file) # <_io.BufferedReader name='demo.jpg'>
# BufferedReader对象产生后,可以用其它第三方模块进行处理


# 打开文件时指定编码方式:open()函数默认以GBK编码,如果打开其它编码的文件,将会抛出异常。
file = open('message.txt','r',encoding='utf-8')
file.close() # 没使用with方法时,必须用此命令将写入的内容保存到文本文件并关闭文件

# 关闭文件:file.close()
# close()方法先刷新缓冲区中的还没有写入的信息,然后再关闭文件,这样可以将没有写入到文件的内容写入到文件中。
# 如果想写入文件,但不想立刻关闭文件,可以用flush()方法将内容写入文本内容


# 打开文件时使用with语句:这是为了解决忘记关闭文件或文件关闭异常的情况而设计的
with open('message.txt','a+') as file:
    file.write('hello world')
    file.write('good')

# file = open('aa.txt','w')
# file.writelines('hello world\n')
# file.writelines('hello world\n')
# file.close()


# 读取文件
# 读取指定字符:file.read([size])
# file:打开的文件对象
# size:指定要读取的字符个数,如果省略则读取所有内容
file = open('aa.txt','r')
print(file.read(8)) # 读取从文件指针往后数8个字符个数
print(file.seek(2)) # 设置文件指针位置,seek(a,b) a是移动的字符个数,b参数有3个值,默认是0,0表示从开头计算,1表示从当前位置计算,2表示从文件尾计算
print(file.read(8)) # 读取从文件指针往后数8个字符个数
file.close()

# seek()和read()的不同:seek不管你是GBK还是UTF8,英文和数字都是按一个字符计算


# 读取一行
with open('aa.txt','r') as file:
    while True:
        line = file.readline()
        print(line,end='')
        if line == '':
            break
# 如果文件很大,read()会一次性读取全部内容,容易造成内存不足


# 读取全部行:readlines()读取全部行,返回一个列表,每一行是列表的一个元素  file.readlines()
# 如果文件很大,读取时会很慢

 

posted @ 2020-08-24 14:00  Zack6688  阅读(180)  评论(0编辑  收藏  举报