python高效读取文件、文件改写

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\n'%(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'+'\n'   #因为strip()方法会将后面的\n也删除,所以我们在这里拼接字符串,将值赋给new_line
7              ew.write(new_line)  #在.email文件中写入的new_line的内容

 

posted @ 2018-06-12 10:52  Miyuki蛋卷  阅读(3093)  评论(0编辑  收藏  举报