文件基本操作

读取一个文件需要有:地址,读取方式,编码格式;

假设d盘根目录有一个文件叫做艾克.txt,那么读取代码为:

f = open('d:\艾克',mode='r',encoding='utf-8') #open(地址,读出方式,编码格式)

这是新建一个对象,每次读取后都要用f.close()进行退出,不然会一直读取占用内存,所以一般都采用下列方法读取,不用每次都输入close退出:

with open('d:\艾克',mode='r',encoding='utf-8') as f:

 

读取方式:

r 只读 只用于读,打印时,控制台会打印出读取文件内容,写入或追加会报错
rb 以二进制打开一个文件用于只读 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。带b的都是以二进制的格式操作文件,他们主要是操作非文字文件:图片,音频,视频等,并且,如果是以带有b的模式操作文件,那么不用声明编码方式。在带有写入或者追加的模式下进行b模式时,进行写入文字操作,需要进行转码操作
r+ 打开一个文件用于读写 打开一个文件用于读写。文件指针默认将会放在文件的开头。如果你在读写模式下,先写后读,那么文件就会出问题,因为默认光标是在文件的最开始,你要是先写,则写入的内容会讲原内容覆盖掉,直到覆盖到你写完的内容,然后在后面开始读取。解决办法是先读一遍再写入,此时光标位置会是在最后面,写入内容将从后边开始添加,不会将前边内容覆盖
r+b 以二进制打开一个文件用于读写 以二进制打开一个文件用于读写。 结合上方rb与r+特性进行参考
     
w 只写 只用写入,写入执行时先会将这个文件清空,清空后再写入,打印时不会在控制台打印出写入文件内容 。若无该文件,会先在该目录创建一个文件再写入
wb 以二进制打开一个文件用于只写 以二进制格式打开一个文件只用于写入。写入执行时先会将这个文件清空,清空后再写入,打印时不会在控制台打印出写入文件内容 。若无该文件,会先在该目录创建一个文件再写入,一般用于非文本文件如:图片,音频,视频等。 并且,如果是以带有b的模式操作文件,那么不用声明编码方式。在带有写入或者追加的模式下进行b模式时,进行写入文字操作,需要进行转码操作
w+ 打开一个文件用于写读 打开一个文件用于写读,写入执行时先会将这个文件清空,清空后再写入,打印时不会在控制台打印出写入文件内容。写入字符串后可以指定光标位置继续写入,重新运行后再次清空
w+b 以二进制打开一个文件用于写读 以二进制打开一个文件用于写读。 结合上方wb与w+特性进行参考
     
a 追加 只用于追加,不会对文件进行清空操作,追加默认是在文件的最后
ab 以二进制打开一个文件用于追加 以二进制打开一个文件用于追加。不会对文件进行清空操作,追加默认是在文件的最后。特性与rb、wb同理 
a+ 打开一个文件用于追加读 打开一个文件用于追加读, 不会对文件进行清空操作,追加默认是在文件的最后。特性与rb、wb同理 
a+b 以二进制打开一个文件用于追加读 以二进制打开一个文件用于追加读, 不会对文件进行清空操作,追加默认是在文件的最后。特性与rb、wb同理 

 

部分测试代码:

r、rb、r+

#演示文件夹地址为相对路径,即在工作文件夹的目录下
#mode = 'r'
l = open('艾克',mode='r',encoding='utf-8')
# reading = l.read()
# print(reading)
# l.close()

# mode = 'rb'
l = open('艾克',mode='rb')
reading = l.read()
print(reading)
l.close()


#with as 模式读取文件
#读写 mode = 'r+'
# 这个模式下,如果你在读写模式下,先写后读,那么文件就会出问题,
# 因为默认光标是在文件的最开始,你要是先写,则写入的内容会将原内容覆盖掉,直到覆盖到你写完的内容,然后在后面开始读取。
# 解决办法是先读一遍再写入,此时光标位置会是在最后面,写入内容将从后边开始添加,不会将前边内容覆盖
with open('艾克',mode='r+',encoding='utf-8') as l:
    # print(l.tell())
    # l.seek(0)
    print(l.read())
    # l.seek(6)
    l.write('你好')
    print(l.read())

 

 

 

w、wb、w+

# made = 'w'
# l = open('aike',mode='w',encoding='utf-8')
# reading = l.write('艾克你好艾克你好艾克你好艾克你好艾克你好')
# l.close()

#mode = 'wb'
l = open('aike',mode='wb')
reading = l.write('艾克你好艾克你好艾克你好艾克你好艾克你好'.encode('utf-8'))
l.close()

#写读 mode = 'w+' 写入时,每一次运行都会将所有内容清空再写入,写入一条后可以指定光标位置继续写入
with open('艾克',mode='w+',encoding='utf-8') as l:
    # l.write('你好')
    # l.seek(3)
    # l.write('艾克')
    # print(l.read())
    l.write('zzz')
    print(l.read())

 

 

其它功能用法:

# f = open('log',mode='r+',encoding='utf-8')
# content = f.read(3)  # 读出来的都是字符
# f.seek(3)  # 是按照字节定光标的位置
# f.tell() 告诉你光标的位置
# print(f.tell())
# content = f.read()
# print(content)
# f.tell()
# f.readable()  # 是否刻度
# line = f.readline()  # 一行一行的读
# line = f.readlines()  # 每一行当成列表中的一个元素,添加到list中
# f.truncate(4)
# for line in f:
#     print(line)
# f.close()

 

注:光标位置的指定是以字节来数,而读取时以字符。

 

posted @ 2019-08-12 20:40  aikell  阅读(219)  评论(0)    收藏  举报