博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python高效读取文件、文件改写
阅读量:4551 次
发布时间:2019-06-08

本文共 3364 字,大约阅读时间需要 11 分钟。

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=lint.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         continue17     elif u not in all_users:  #判断输入的账号不在all_users内18         print('用户不存在')19         continue20     elif p!=all_users.get(u): #判断密码不等于字典中对应的key值21         print('密码错误')22         continue23     else:24         print('登录成功')25         break26 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_data5 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')           #删除原来的文件words10 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_line7              ew.write(new_line)  #在.email文件中写入的new_line的内容

 

转载于:https://www.cnblogs.com/miyuki/p/9168214.html

你可能感兴趣的文章
百度前端学习日记03——CSS选择器
查看>>
二维数组和二级指针
查看>>
HDOJ_就这么个烂题总是WA先放这把
查看>>
十大经典官场小说
查看>>
uva 101 POJ 1208 The Blocks Problem 木块问题 vector模拟
查看>>
Python 面向对象 特殊方法(魔法方法)
查看>>
[转]OData/WebApi
查看>>
[转]高颜值、好用、易扩展的微信小程序 UI 库,Powered by 有赞
查看>>
[转]SQL Server如何启用xp_cmdshell组件
查看>>
[转]微擎应用笔记3--manifest.xml文件使用说明
查看>>
Codeforces 1000C Covered Points Count 【前缀和优化】
查看>>
python高效读取文件、文件改写
查看>>
gulp
查看>>
pgsql查询优化之模糊查询
查看>>
[转]-Gradle使用手册(三):构建任务
查看>>
ExtJS下拉树
查看>>
android 调用系统相机录像并保存
查看>>
BW系统表的命名规则
查看>>
Asp.Net在IE10下出现_doPostBack未定义的解决办法 LinkButton
查看>>
《CLR via C#》Part2之Chapter5 基元类型、引用类型和值类型(一)
查看>>