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\\test\python一定要学好.txt',mode='w+',encoding='utf-8') #\t是横向制表符,所以\\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('{}\n{}'.format(username,password)) #\n把账号和密码换行.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()删除字符串首尾空白符或\n。
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('{}\n{}'.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('班长:小明\n班主任:杨老师') #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。