day02-文件操作

  1 文件操作。
  2 1,文件路径:d:python一定要学好.txt
  3 2,编码方式:utf-8 gbk 。。。。
  4 3,操作模式:只读,只写,追加,读写,写读..... 不论哪种方式都只能执行一次。例如r模式,只能读取一次。
  5 以什么编码方式储存的文件,就以什么编码打开进行操作。
  6 
  7 
  8 只读: r rb (b表示byte 以二进制格式打开一个文件用于只读),视频和图片rb按照字节读。
  9 f = open('d:python一定要学好.txt',mode='r',encoding='utf-8') #open(路径,操作模式,编码方式),windows的编码方式是gbk,而python是utf-8,没指定编码方式就会出现乱码。
 10 print(f.read())                                             #'d:python一定要学好.txt'是绝对路径。这个文件存放在d盘。
 11 f.close()
 12 
 13 
 14 f = open('test',mode='rb')  #'test'是相对路径(当前路径),跟正在操作的python file 是同一个目录directory。
 15  print(f.read())
 16 f.close()
 17 
 18 
 19 只写: w wb 删除所有字符,接着写入新的字符。b模式很少使用,操作图片的时候可以用到。
 20 f = open('d:python一定要学好.txt',mode='w',encoding='utf-8')
 21 f.write('专心')
 22 f.close()
 23 
 24 
 25 f = open('test',mode='wb')
 26 f.write('加油加油'.encode('utf-8'))
 27 f.close()
 28 
 29 追加 a ,ab ,a+(追加,还可以读取)
 30 f = open('d:python一定要学好.txt',mode='a',encoding='utf-8')
 31 f.write('年少不努力,老大徒伤悲')
 32 f.close()
 33 
 34 
 35 f = open('d:python一定要学好.txt',mode='ab')
 36 f.write('今天很重要'.encode('utf-8'))
 37 f.close()
 38 
 39 
 40 读写:r+ r+b 读取内容,接着写入内容,不删除原来的内容。r+使用最多。
 41 f = open('test',mode='r+',encoding='utf-8')
 42 print(f.read())
 43 f.write('年少不努力,老大徒伤悲')
 44 f.close()
 45 
 46 f = open('test',mode='r+b')
 47 print(f.read())
 48 f.write('坚持努力'.encode('utf-8'))
 49 f.close()
 50 
 51 
 52 写读:w+ w+b 删除内容,写入新的内容,接着读取新的内容
 53 f = open('test',mode='w+',encoding='utf-8')
 54 f.write('今天坚持跑步和学习')
 55 f.seek(0)    #将光标(文件指针)移动到0的位置(最左边)
 56 print(f.read())
 57 f.close()
 58 
 59 
 60 f = open('test',mode='w+',encoding='utf-8')
 61 f.write('今天坚持跑步和学习')
 62 f.seek(0)       #将光标(文件指针)移动到0的位置(最左边)
 63 f.truncate(12)  #截取12个字节,也就是截取了 今天坚持
 64 print(f.read())
 65 f.close()
 66 
 67 
 68 f = open('test',mode='w+b')
 69 f.write('今天很重要'.encode('utf-8'))   #写入的内容是str,但是读取的内容是bytes,为什么?因为open()函数把写入的内容当作str处理了
 70 f.seek(0)
 71 print(f.read())
 72 f.close()
 73 
 74 
 75 1byte = 8bits, 1byte就是一个字节,1bit是最小存储单位(存储一个0或一个1)
 76 f = open('log',mode='r+',encoding='utf-8')
 77 print(f.read(3))  #读取三个字符。一个英文字母是一个字符,一个汉字也是一个字符.
 78                    # 在utf-8中,一个英文字母使用一个字节保存,一个汉字使用三个字节保存。
 79                     另外,一个数字也是一个字节保存。一个汉字标点符号是三个字节保存。
 80 f.seek(3)     #seek(3)表示把光标移动到第三个字节后面。
 81               #那么seek(2)就会报错,因为log的内容都是汉字,如果都是英文字母就不会报错。
 82 print(f.read(3)) #read()只能读取光标后面的内容。
 83 f.close()
 84 
 85 
 86 f = open('D:Python\testpython一定要学好.txt',mode='w+',encoding='utf-8') #	是横向制表符,所以\t或T才能表示路径。
 87                                    #D:Python\test,当python和test两个目录没创建的情况下,创建python代码练习.txt文件,就会报错。
 88 f.write('123456')  #r+ 读写模式,如果先写的话,光标是从最左边开始往右边走,写入的123456(6个字节)覆盖原来的两个汉字(6个字节),后面的字符保持不变。
 89 f.seek(0)
 90 print(f.read())
 91 print(f.tell())   #tell()告诉我们光标所在位置。
 92 f.close()
 93 
 94 
 95 f = open('test01','w+',encoding='utf-8')
 96 f.write('今天很重要') #写入字符之后,光标在最右边。
 97 print(f.tell())
 98 f.seek(f.tell()-6) #光标从最后面向前移动了6个字节。
 99 print(f.read())
100 f.close()
101 
102 
103 f = open('log',mode='r+',encoding='utf-8')
104 # print(f.readline()) #一行读取
105 # print(f.readlines()) #多行读取,并且放在列表里面
106 for i in f.readlines():
107     print(i)
108 f.close()
109 
110 
111 #注册,三次登陆:
112 username = input('注册名字:')
113 password = input('注册密码:')
114 print('恭喜你注册成功!')
115 with open('注册,三次登陆','w',encoding='utf-8') as f: #with open() as f相当于f=open(),这语句可以同时打开两个文件:with open() as f,open() as f1:,并且能自动关闭文件不需要close().
116     f.write('{}
{}'.format(username,password))  #
把账号和密码换行.write()的()里面只能传入一个参数,所以write(username,password)就报错。
117 list=[]
118 n = 0                         #循环三次的框架:n=0,while n<3,n+=1.
119 while n < 3:
120     username2 = input('登陆名:')
121     password2 = input('密码:')
122     f1 = open('注册,三次登陆','r',encoding='utf-8')
123     for line in f1:
124         list.append(line)
125     if username2 == list[0].strip()  and password2 == list[1].strip(): #''.strip()删除字符串首尾空白符或
。
126         print('登陆成功')
127         break
128     else:
129         print('账号或密码错误')
130     n += 1
131 
132 
133 #注册,三次登陆方法二 :
134 username = input('注册名字:')
135 password = input('注册密码:')
136 print('恭喜你注册成功!')
137 with open('注册,三次登陆','w',encoding='utf-8') as f:
138     f.write('{}
{}'.format(username,password))
139 n = 0
140 while n < 3:
141     username2 = input('登陆名:')
142     password2 = input('密码:')
143     f1 = open('注册,三次登陆','r',encoding='utf-8')
144     i = f1.readlines()
145     if username2 == i[0].strip()  and password2 == i[1].strip():
146         print('登陆成功')
147         break
148     else:
149         print('账号或密码错误')
150     n += 1
151 
152 
153 #文件修改的详细步骤:
154 #原文件替换内容,然后把原文件所有内容写入到新文件里面。
155 with open('班长,班主任',mode='w+',encoding='utf-8') as f,open('班长,班主任.bak',mode='w+',encoding='utf-8') as f2: #打开原文件,创建新文件(原文件的备份)
156     f.write('班长:小明
班主任:杨老师')     #w+模式,记得seek(0)
157     f.seek(0)                              #光标移动到0的位置,不然光标在杨老师后面,后面的内容为空,导致读取空内容。
158     for line in f:                         #读取f的元素,所以使用W+模式。line遍历了f,line是f的任意元素。
159         if  '杨老师' in line:
160             line = line.replace('杨老师','金老师')  #元素line替换内容
161         print(line)
162         f2.write(line)                            #文件f2写入元素line的内容
163 
164 import os
165 os.remove('班长,班主任')                   #删除原文件
166 os.rename('班长,班主任.bak','班长,班主任')  #删除原文件之后,把新文件的名称修改为原文件的名称。这种操作相当于修改了原文件。
167 
168 
169 文件里面把多行打印出来的两种方法:
170 方法1:
171 with open('test01',encoding='utf-8') as f:
172     count = 0
173     while count<5:            #打印5行
174         line = f.readline()    #读取一行
175         print(line.strip())      #每打印完一行,光标移动到该行最后的位置。下次循环,就可以打印下一行信息。
176         count += 1
177 方法2:
178 def f(a):
179     with open(a,encoding='utf-8') as f:       #f是句柄,因为f放在首位。
180         line = f.readlines()                       #line是列表,可以使用for循环来取值
181         for i in f:
182             print(i.strip())
183 f('day06-迭代器.py')
184 
185 处理文件,用户输入文件名和查找的内容,将内容的每一行都输出到屏幕。(生成器跟文件操作相结合)
186 def generator(filename,aim):
187     with open(filename,encoding='utf-8') as f:
188         for i in f:                              # i 是 f 每一行内容。
189             if aim in i:
190                 yield i.strip()
191 g = generator('day07-生成器.py','生成器')        #用户输入文件名和查找的内容。
192 for i in g:
193     print(i)
194 
195 文件操作遇到的问题:1.无法操作word。
原文地址:https://www.cnblogs.com/python-daxiong/p/10267909.html