Python-文件读写及修改
文件的读写有三种形式:读、写和追加。
一、读模式 r 和读写模式 r+
1、读模式 r
读模式r特点:(1)只能读,不能写;(2)文件不存在时会报错。
(1)例:读取当前目录下的books.txt文件,该文件如下所示。

   
解析:
a、用open打开文件,在python3中只有open。python2可以用open和file。关闭文件是close()。一般有开就有关
b、如果在当前目录,可以直接写文件名,否则需添加路径。
c、如果不写 'r',即写成 f = open('books.txt'),也是默认读模式。
d、read可以将文件所有的内容都读出来
e、另外,有时需要添加解码格式 encoding ,格式为:
f = open('books','r',encoding='utf-8')
(2)
read:读取文件全部内容
readline:读取一行
readlines:读取每一行,并且放到一个list里
  
  
2、读写模式 r+
读写模式r+特点:(1)文件不存在时会报错;(2)可以读,也可以写,是覆盖写,会把文件最前面的内容覆盖
  
‘水浒传’把‘平凡的’三个字覆盖,原来的文件变为:

二、写模式 w 和写读模式 w+
1、写模式
写模式w特点:(1)只能写,不能读;(2)写的时候会把原来文件的内容清空;(3)当文件不存在时,会创建新文件。
如下,写入‘水浒传’时,将原来的内容都清空。
   
f.flush():有时我们用f.write()后,会发现没有写入文件,这是因为内容存在了缓冲区,需要等缓冲区满了之后,再把所有数据写入。此时可以用f.flush()强制把缓冲区里面的数据写到磁盘上。
2、写读模式 w+
写读模式w+特点:(1)可以写,也可以读;(2)写的时候会把原来文件的内容清空;(3)当文件不存在时,会创建新文件。
三、追加模式a和追加读模式a+
1、追加模式a
追加模式a特点:(1)不能读;(2)可以写,是追加写,即在原内容末尾添加新内容;(3)当文件不存在时,创建新文件。

将‘水浒传’添加到原内容的末尾

2、追加读a+模式
追加读a+模式特点:(1)可读可写;(2)写的时候是追加写,即在原内容末尾添加新内容;(3)当文件不存在时,创建新文件。
以上几种模式,可以用下表来总结:
| 读写模式 | 是否可读 | 是否可写 | 文件不存在时 | 
| r | 是 | 否 | 报错 | 
| r+ | 是 | 是,覆盖写 | 报错 | 
| w | 否 | 是,清空原内容 | 创建新文件 | 
| w+ | 是 | 是,清空原内容 | 创建新文件 | 
| a | 否 | 是,追加写 | 创建新文件 | 
| a+ | 是 | 是,追加写 | 创建新文件 | 
四、文件指针
文件指针用来记录文件走到哪里。
文件指针是很重要的,我们看下面的例子中,read将books.txt的内容全部读了出来,readline则没有读出任何内容。原因是read读完之后,文件指针到了文件的末尾,此时readline接着从这个位置开始读,肯定是没内容的。因此有时需要调整文件指针的位置。
   
seek可以移动文件指针,移动后只是针对读,用追加模式写的时候,还是在末尾写。
另外,seek(num),这个num指的是字符,不是行。
在上面的代码中,加一句f.seek(0),即可将指针移到文件开头。这次,readline就可以从头开始读了。
  
五、自动关闭文件
with可以自动关闭文件,用法如下:
with open('books.txt','a+') as f:
    f.write('\n三体')
六、文件修改
1、简单粗暴直接修改
最简单粗暴的修改文件,步骤是:
(1)打开文件,获取文件内容;
(2)对内容进行修改;
(3)清空原来文件的内容;
(4)把新的内容写进去。
这种方法很简单,下面看一个小例子----文件username里存放了姓名和密码,如下图格式。我们要在所有姓名前加上‘A班_’

因为'A班_'中含有中文,需要叫上encoding='utf-8',否则会出现乱码。
   
2、备份文件的方法
当文件很大时,刚刚的方法在一次性读取文件内容和写入新内容时,耗时长,占用磁盘空间也较大。
备份文件的方法可以建立一个备份文件,修改一行写一行,具体步骤如下:
(1)打开2个文件,原文件a和备份文件b。如a.txt b.txt.bak
(2)删除a文件,将b文件名改为a文件名
例:将文件words里的“花”改成“flower”


七、小练习
1、产生手机号 前几位一样1861253 后四位随机,写到文件里。
分析:(1)首先要随机产生一些四位数,位数不足的要补0,zfill可以给字符串补0;
(2)需要写到文件里,可以用w或者a模式。文件有打开就要有关闭。
import random
f = open('phones.txt','w')
num = int(input('请输入你要产生的手机号个数:'))
for i in range(num):
start = '1861253'
random_num = str(random.randint(1,9999))
new_num = random_num .zfill(4) #不够4位就补0,仅对字符串可以使用
phone_num = start + new_num
f.write(phone_num+'\n')
f.close()
2、监控服务器日志,如果ip出现的次数大于50次,就把该ip加入黑名单。日志文件的格式如下图

分析:(1)首先,我们应该从日志里提取出所有ip。根据日志文件的格式,我们可以看到每一行的开头是ip,那么可以一行一行的读取数据,然后用空格进行分割,则该行第一个元素就是ip。(2)然后需要统计每一个ip出现的次数,最直接想到的就是count。(3)找到出现次数大于50次的ip,打印出来。
import time point = 0#记录文件指针的位置
while True:
f = open(r'D:\access.log',encoding='utf-8')
all_ips = []
f.seek(point)#移动文件指针,本次接着上次的位置继续读
for line in f:
ip = line.split()[0]#每行第一个元素为IP
all_ips.append(ip)#存放所有的ip,不去重
point = f.tell()# 获取文件当前指针位置
ips_set = set(all_ips)#去重
for i in ips_set:
if all_ips.count(i)>50:
print('应该加入黑名单的ip是:%s\n'%i)
time.sleep(60)#暂停60s
运行结果为:

Python-文件读写及修改的更多相关文章
- python文件读写及修改
		
转载:https://www.cnblogs.com/zhxwind/p/8761618.html 文件的读写有三种形式:读.写和追加. 一.读模式 r 和读写模式 r+ 1.读模式 r 读模式r特点 ...
 - python文件读写及形式转化和CGI的简单应用
		
一丶python文件读写学习笔记 open() 将会返回一个 file 对象,基本语法格式如下: open(filename, mode) filename:包含了你要访问的文件名称的字符串值. mo ...
 - python 文件读写操作(24)
		
以前的代码都是直接将数据输出到控制台,实际上我们也可以通过读/写文件的方式读取/输出到磁盘文件中,文件读写简称I/O操作.文件I/O操作一共分为四部分:打开(open)/读取(read)/写入(wri ...
 - python新手学习之文件读写之修改
		
文件除r.w.a方式打开外,还可以有多种组合方式如r+ w+ a+等多种方式 1.r+ 读写模式介绍,开始读是从一行开始读,写永远从最后开始写(类似于追加) # f = open("test ...
 - python笔记(三)---文件读写、修改文件内容、处理json、函数
		
文件读写(一) #r 只读,打开文件不存在的话,会报错 #w 只写,会清空原来文件的内容 #a 追加写,不会请求,打开的文件不存在的话,也会帮你新建的一个文件 print(f.read()) #获取到 ...
 - Python 文件读写,条件循环(三次登录锁定账号实例)
		
通过文件读写,条件循环相关语法,实现三次登录失败则锁定该账号的功能 需求一 """需求描述: 1.输入正确账号,密码,退出程序 2.登录失败,重新输入账号密码 3.同一账 ...
 - Python文件读写及网站显示
		
一.关于文件读写的笔记 (一) 文件概述 文件是一个存储在辅助存储器上的数据序列,可以包含任何数据内容 文件都是按照2进制进行存储的,但在表现形式上有2种:文本文件和二进制文件. 1. 文本文件 文本 ...
 - Python文件读写--错误一
		
在学习python的文件读写操作的时候,我遇到了一点麻烦事,觉得可以记录下来,先上代码吧. with open('test.txt') as file: file.write('test') prin ...
 - 【学习】python文件读写,用with open as的好处,非常好【转载】
		
原文链接:http://www.cnblogs.com/ymjyqsx/p/6554817.html 备注:博主还有很多值得学习的笔记,遇到问题可以拜读,非常感谢博主的总结 读写文件是最常见的IO操作 ...
 - python文件读写,以后就用with open语句
		
读写文件是最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘, ...
 
随机推荐
- git 把其他分支上的文件拿来覆盖本地
			
1:git checkout oldversion -- 文件地址 2: 一个分支从某个角度讲也像是一次commmit,也是有向无环图的一个点
 - await在forEach不起作用解决【await is a reserved word】
			
原文链接:https://blog.csdn.net/ssbb1995/article/details/82084800 1.await 只能在 async中使用,如: async function ...
 - PS批量制作获奖证书并导出PNG
			
其实方法和"使用PS批量制作视频字幕"的方法类似.区别在于制作视频字幕时导出成psd格式就可以直接导入Premiere中使用了,而获奖证书考虑到打印设备有无PS的不确定性,可能需要 ...
 - (转)Java锁性能提高有哪些机制?
			
转自:https://forum.idevfun.io/t/topic/235/2 Java 中,Synchronized是通过对象内部的一个叫做监视器锁(monitor)来实现的.但是监视器锁本质又 ...
 - 软件测试_Loadrunner_性能测试_脚本优化_关联_手动关联
			
在写文章之前写一下自己的心路历程,录制脚本主要是上传图片并返回查询结果的过程.录制完脚本后发现函数中URl地址中有图片ID后台随机生成的32位随机数,并且每次上传图片id都会变化.我就上网搜索了一些解 ...
 - IDEA实用教程(三)
			
4. JDK环境的配置 1) 进入JDK配置界面 2) 创建JDK环境 3) 选择本地JDK的安装位置 4) 保存配置 点击右下角的Apply后,再点击OK保存配置
 - G1垃圾收集器官方文档透彻解读【官方解读】
			
在前几次中已经对G1的理论进行了一个比较详细的了解了,对于G1垃圾收集器最权威的解读肯定得上官网,当咱们将官网的理解透了,那基本上网上对于G1的说明其实最终都是来自于官网,所以接下来会详细来解读Ora ...
 - 链表实现队列(python)
			
# -*- coding: utf-8 -*- from collections import deque class Node(object): def __init__(self, value=N ...
 - MySQL之JDBC插入、修改、删除封装集于一个方法
			
1. 先建四个包 ① com.tz.entity 实体包 ② com.tz.dao 数据访问层包 -> com.tz.dao.impl 实现包 ③ com.tz.util 工具类包 ④ com. ...
 - 除了不要 SELECT * ,程序员使用数据库还应知道的11个技巧
			
SQL:sum里加条件SELECT SUM( CASE WHEN "V7010" BETWEEN 0 AND 0.1 THEN 1 ELSE 0 END) FROM "C ...