• 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
    '%(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的内容

     

  • 相关阅读:
    斯特林公式
    高精度算法
    容斥原理
    贪心问题之——Dijkstra最短路
    博弈论
    JavaScript数据类型
    JavaScript变量
    认识JavaScript
    编程语言与计算机
    CSS验证工具
  • 原文地址:https://www.cnblogs.com/miyuki/p/9168214.html
Copyright © 2020-2023  润新知