1、fw=open('name','w') #打开名为name的文件
fw.write('abcde') #在文件内写入abcde
fw.flush() #把缓冲区里面的数据立即写到磁盘上
fw.close() #关闭文件
2、自动关闭文件的方法:
with open('文件1','读写方式') as 别名1,open('文件2','读写方式') as 别名2:
别名1.read()
别名2.write('xxx')
3、直接循环文件对象
f=open('aaa')
for line in f: #直接循环文件对象,每次循环的时候就是取每一行的数据
print('line',line)
举例(不可以一起运行,这是两个页面的内容,登录和注册,所以使用的时候,需要互相注释掉):
1 all_users={} #定义一个字典
2 f=open('users.txt') #打开users文件
3 for line in f: #直接循环文件对象
4 line=line.strip() #将空格去掉赋值给line
5 line_list=line.split(',') #分割行数据,以逗号隔开
6 username=line_list[0] #将下标为0的数据赋给username
7 passwd=line_list[1] #将下标为1的数据赋给passwd
8 all_users[username]=passwd #以字典的key-value形式存储账号密码
9
10 #登录
11 for i in range(3): #循环三次登录
12 u=input('users:').strip() #输入账号
13 p=input('pwd:').strip() #输入密码
14 if not u or not p: #判断账号和密码没有输入
15 print('账号、密码不能为空')
16 continue
17 elif u not in all_users: #判断输入的账号不在all_users内
18 print('用户不存在')
19 continue
20 elif p!=all_users.get(u): #判断密码不等于字典中对应的key值
21 print('密码错误')
22 continue
23 else:
24 print('登录成功')
25 break
26
27 #注册
28 for i in range(3):
29 u = input('user:').strip()
30 p = input('p:').strip()
31 cp = input('cp:').strip()
32 if not u or not p:
33 print('账号、密码不能为空')
34 elif u in all_users:
35 print('该用户已经被注册!')
36 elif u not in all_users and cp==p:
37 info = '%s,%s
'%(u,p)
38 print('恭喜注册成功,账号:'+u+',密码:' + p)
39 f.write(info)
40 break
4、文件改写:
文件改写有两种方式:
(1)简单粗暴直接的方式:
思路:
①先获取到文件里面的所有内容
②然后修改内容
③清空原来文件里面的内容
④重新写入
1 f=open('users.txt','a+') #使用追加模式打开文件
2 f.seek(0) #将指针移到文件首位
3 all_data=f.read() #将文件读取出来赋给all_data变量
4 new_data=all_data.replace('123','python') #把all_data的值修改后赋给新变量new_data
#将文件中的‘123’替换成‘python’
5 f.seek(0) #将指针移到文件首位
6 f.truncate() #清空文件内容
7 f.write(new_data) #将new_data的内容写进文件里
8 f.close() #关闭文件
(2)高效的处理方式:
思路:
①先打开原来的文件,再打开一个空文件
②循环处理原来文件里每一行数据,处理完之后,写到新文件里面
③把原来的文件删除,把新文件的名字改成原来文件的名字
要求:
①去掉前面的空格
②去掉空行
③把‘你’替换成‘you’
④写到新文件里
⑤把原来的文件删除,把新文件的名字改成原来文件的名字
1 import os #引入os模块
2 with open('words',encoding='utf-8') as fr,open('.words,'w',encoding='utf-8') as fw:
3 #以默认读r的方式打开words文件,将文件内容赋给fr,以写w的方式打开.words文件,将文件内容赋给fw
4 for line in fr: #循环fr文件内容中的每一行数据
5 line=line.lstrip() #去掉左边的空格,将去掉空格的内容赋给line
6 if line: #判断这一行是否有数据
7 line=line.replace('你','you') #将文件中有'你'的数据,替换成'you',把内容赋给line
8 fw.write(line) #将line的值写入fw文件里
9 os.remove('words') #删除原来的文件words
10 os.rename('.words','words') #将.words的文件名替换成原来的文件名words
5、小练习:
一个文档中,内容为随机的数字字母组合,以数字开头的,我们认为是不合法的,不要该内容,合法的我们在末尾加上@163.com
1 with open('email.txt') as er,open('.email.txt','w') as ew: #只读模式打开email.txt文件,创建新的.email.txt文件
2 for line in er: #循环输出email文件中每一行的内容,判断是否满足条件
3 if line[0].isalpha(): #判断第一行第一位的值是否只为英文
4 #也可以写成 if not line[0].isdigit() 判断是否不是纯数字
5 line=line.strip() #为真的情况下,将左右的空格去掉赋给line值
6 new_line=line+'163.com'+'
' #因为strip()方法会将后面的
也删除,所以我们在这里拼接字符串,将值赋给new_line
7 ew.write(new_line) #在.email文件中写入的new_line的内容