open(‘文件名‘,‘打开模式‘,encoding=‘编码方式‘)
打开模式有:
”+“表示可同时读写某个文件
”U“表示在读取时,可以将\r\n自动转换成\n。(u只能与r或者r+同时用)
"b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,特别是windows操作系统在处理二进制文件时需要注意 ,linux可以不用管)
1 # w,只写模式,不可读 2 f = open("filetest1", "w", encoding="utf-8") 3 f.write("北冥有鱼,其名为鲲,鲲之大,一锅炖不下;\n") 4 f.close() 5 6 # r,只读模式,不可写 7 f = open("filetest1", "r", encoding="utf-8") 8 content = f.read() # read方法会将文件内容都读出来 9 print(content) 10 f.close() 11 12 # a,追加模式,可写,不可读 13 f = open("filetest1", "a", encoding="utf-8") 14 f.write("化而为鸟,其名为鹏,鹏之大,需要两个烧烤架,一个秘制,一个微辣。") 15 content = f.read() # 异常:io.UnsupportedOperation: not readable 16 # print(content) 17 f.close() 18 19 # readlines()方法也会将文件内容全部读取到内存里 20 # readlines()方法的返回值是一个列表,列表的每个元素就是文件的一行内容 21 f = open("filetest","r",encoding="utf-8") 22 for index, line in enumerate(f.readlines()): 23 if index == 4: 24 print("--------华丽分割线--------") 25 continue 26 print(line.strip()) 27 f.close() 28 29 # 上面读文件用到的read()和readlines()方法会将文件的内容全部读出来,如果文件太大,内存将耗尽 30 # 下面的方式只会一行一行的读取,读取效率高,输出结果同read和readlines完全相同 31 f = open("filetest","r",encoding="utf-8") 32 count = 0 33 for line in f: 34 count += 1 35 if count == 5: 36 print("--------华丽分割线--------") 37 continue 38 print(line.strip()) 39 f.close() 40 41 f = open("filetest","r",encoding="utf-8") 42 print(f.tell()) # 获取光标当前的位置 43 print(f.readline()) 44 print(f.tell()) 45 print(f.readline()) 46 f.seek(0) # 设置光标的位置 47 print(f.readline()) 48 f.close() 49 50 # flush: 51 # 强制将数据写入文件。 52 # 如果不使用flush,python自动往缓冲区写数据,缓冲区满后再写入文件并清空缓冲区,这样容易丢数据 53 54 f = open("filetest","a",encoding="utf-8") 55 f.seek(10) # 设置光标位置 56 f.truncate(10) # 截取文件内容。注意:理论上是从第10的位置开始写内容,实际还是从文件的开始截取指定的长促。 57 f.close() 58 59 # 进度条 60 import sys,time 61 62 for i in range(20): 63 sys.stdout.write("#") 64 sys.stdout.flush() # 好像也加这一句也能出效果 65 time.sleep(0.1)
# r+,读写
# 先准备一个文件,写入5行内容 f = open("filetest3", "w", encoding="utf-8") f.write("老夫聊发少年狂,半夜想喝疙瘩汤。\n") f.write("一树梨花压海棠,酸菜白肉氽血肠。\n") f.write("不思量,自难忘,啃上一根大骨棒。\n") f.close() # r+,读写模式 f = open("filetest3", "r+", encoding="utf-8") #以读写模式打开文件 f.readline() f.readline() f.write("---------华丽分割线---------\n") f.seek(0) # 如果不加这一行,下面的read方法是读不到内容的,因为上面write的时候并不是在第2行写入的,而是在内容的最后接着又接入的。 content = f.read() print(content) f.close() 注意文件内容: 理论上,我们先往一个文件中写入了5行内容。然后我们使用r+(读写)模式写读取两行内容,然后write一行内容进去,理论上我们期望的结果应该如下: 老夫聊发少年狂,半夜想喝疙瘩汤。 一树梨花压海棠,酸菜白肉氽血肠。 ---------华丽分割线--------- 不思量,自难忘,啃上一根大骨棒。 其实,实际结果是如下: 老夫聊发少年狂,半夜想喝疙瘩汤。 一树梨花压海棠,酸菜白肉氽血肠。 不思量,自难忘,啃上一根大骨棒。 ----------华丽分割线--------- 结论:总是在文件的最后追加内容。而不是插入。
原文:https://www.cnblogs.com/Ryan-Fei/p/12098383.html