1 # 打开文件 2 open("yesterday") 3 4 5 # 读取文件的内容 6 data = open("yesterday", encoding = "utf-8").read() # 不指定编码表,会用默认编码表.万一和文件所用编码表不一致,会乱码. 最好指定编码表. 7 print(data) 8 9 10 # 要对文件进行更多操作,需要将其封装成一个对象 11 f = open("yesterday","r",encoding = "utf-8") # 文件句柄. .r代表可读的, 这种方式是打开一个文件> 12 f1 = open("yesterday_copy","w",encoding = "utf-8") # w代表可写的,这样其实是创建一个文件. 若文件已存在,里面内容会被覆盖. 13 data = f.read() 14 data2 = f.read() 15 print(data) 16 print("=================") 17 print(data2) # 打出来为空.因为data读完后指针已经到了文件的最后面,再读data2是接着往下读的, 后面没有内容, 所以data2为空. 18 19 20 # 写, 原文件内容被覆盖 21 f.write("我爱北京天安门") # 默认文件是读模式,要先打开,才能写. 22 f1.write("我爱北京天安门,\n") 23 f1.write("天安门上太阳升") # 写出来的两行会换行 24 25 # 追加, 在原文件基础上追加 26 f2 = open("yesterday_copy","a",encoding = "utf-8") # a 代表append追加. a 不能读,只能写, 不过不会覆盖原来的文件内容. 27 f2.write("天安门上太阳升.....") 28 29 f.close() 30 f1.close() 31 f2.close() 32 33 34 # 读指定行数的文件内容 35 print(f.readline()) # 读一行 36 37 # 读五行 38 for i in range(5): 39 print(f.readline()) 40 41 42 43 # 循环读文件并打印 44 for line in f.readline(): 45 print(line) 46 47 48 # 循环读文件并打印,第十行不打印. 方法1 49 for index, line1 in enumerate(f.readline()): 50 if index == 9: 51 print("==============我是分割线==========") 52 continue 53 print(line1.strip()) 54 55 56 # 循环读文件并打印,第十行不打印. 方法2 57 count=0 58 for line in f: 59 if count==9: 60 print("===========我是分割线===========") 61 count += 1 62 continue 63 print(line) # 一行行读,且内存一次只保存一行 64 count+=1 65 66 67 # 读完文件把指针移到前面 68 print(f.tell()) # 返回当前文件指针位置 (若是0,代表指针在文件开头). 指针不是按行数计数的, 是按字符数量来计数的. 69 print(f.read(5)) # 读5个字符 70 f.seek(0) # 把指针调回到文件最开始的位置. 不是所有的文件都可以这么移.seekable()方法判断一个文件是否可移 71 72 73 # 打印文件的编码表 74 print(f.encoding) 75 76 77 # 返回文件在内存中的编号 78 print(f.fileno()) 79 80 81 # flush 刷新内存中的数据到文件或硬盘 82 print(f.flush()) 83 84 85 # 判断文件是否关闭 86 print(f.closed()) 87 88 89 # 截断文件 90 f3 = open("yesterday_copy","a",encoding = "utf-8") # 模式必须是a(append) 91 f3.truncate() # 什么都不写,就是清空文件 92 f3.truncate(10) # 从文件开头截取10个字符 93 94 95 96 # 模仿进度条 97 import sys, time 98 99 for i in range(50): 100 sys.stdout.write("#") 101 sys.stdout.flush() # 一点点打印出来, 类似进度条. 若不加flush()方法, 会一下子打印出来所有的#,就不像进度条了. 102 time.sleep(1) # 每打一次休息一秒 103 104 105 106 # 读写文件 r+ 模式 107 f4 = open("yesterday_copy","r+",encoding = "utf-8") 108 print(f4.readline()) 109 print(f4.readline()) 110 print(f4.readline()) 111 f4.write("===========test=========") # 写的时候是从最后面开始追加. 不论此时读到第几行(不论指针是哪里) 112 print(f4.readline()) 113 f4.close() 114 115 116 # 写读 w+ 模式 117 f5 = open("yesterday_copy2","w+",encoding = "utf-8") 118 print(f5.readline()) # 没有读到内容,因为文件刚刚创建是空的. 119 print(f5.readline()) 120 print(f5.readline()) 121 print(f5.tell()) 122 f5.write("=========test============") # 写读模式是先创建一个文件, 再写内容. 写的内容会覆盖掉后面的内容,. 123 print(f5.readline()) 124 f5.close() 125 126 127 # 二进制读取 rb 模式 128 f6 = open("yesterday_copy2","rb") # 二进制不能传encoding参数 129 print(f6.readline()) 130 f6.close() 131 132 # 什么情况会用rb 模式? 133 # 1. 网络传输时会用到. 网络传输(即使是字符串)只能用rb模式. 134 # 2. 迅雷等下载的文件是二进制文件. 135 136 137 # 二进制写 wb 模式 138 f7 = open("yesterday_copy2","wb") # 二进制不能传encoding参数 139 f7.write("hello binary\n") # 字符串写不进去. 要用bytes写. 140 f7.write("hello binary\n".encode()) # 字符串转换成二进制
Python文件操作
猜你喜欢
转载自www.cnblogs.com/cheese320/p/8858945.html
今日推荐
周排行