Python文件操作

  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()) # 字符串转换成二进制

猜你喜欢

转载自www.cnblogs.com/cheese320/p/8858945.html