array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 python文件读写及修改 - 爱码网
zhiminyu

转载:https://www.cnblogs.com/zhxwind/p/8761618.html

文件的读写有三种形式:读、写和追加。

一、读模式 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
复制代码

运行结果为:

 

参考:

https://www.runoob.com/python/python-files-io.html

https://www.runoob.com/python/file-methods.html

https://blog.csdn.net/album_gyd/article/details/89630708

https://www.cnblogs.com/wc-chan/p/8085452.html

一、修改原文件方式

复制代码
复制代码
 1 def alter(file,old_str,new_str):
 2     """
 3     替换文件中的字符串
 4     :param file:文件名
 5     :param old_str:就字符串
 6     :param new_str:新字符串
 7     :return:
 8     """
 9     file_data = ""
10     with open(file, "r", encoding="utf-8") as f:
11         for line in f:
12             if old_str in line:
13                 line = line.replace(old_str,new_str)
14             file_data += line
15     with open(file,"w",encoding="utf-8") as f:
16         f.write(file_data)
17 
18 alter("file1", "09876", "python")
复制代码
复制代码

二、把原文件内容和要修改的内容写到新文件中进行存储的方式

2.1 python字符串替换的方法,修改文件内容

复制代码
复制代码
import os
def alter(file,old_str,new_str):
    """
    将替换的字符串写到一个新的文件中,然后将原文件删除,新文件改为原来文件的名字
    :param file: 文件路径
    :param old_str: 需要替换的字符串
    :param new_str: 替换的字符串
    :return: None
    """
    with open(file, "r", encoding="utf-8") as f1,open("%s.bak" % file, "w", encoding="utf-8") as f2:
        for line in f1:
            if old_str in line:
                line = line.replace(old_str, new_str)
            f2.write(line)
    os.remove(file)
    os.rename("%s.bak" % file, file)

alter("file1", "python", "测试")
复制代码
复制代码

2.2 python 使用正则表达式 替换文件内容 re.sub 方法替换

复制代码
复制代码
1 import re,os
2 def alter(file,old_str,new_str):
3 
4     with open(file, "r", encoding="utf-8") as f1,open("%s.bak" % file, "w", encoding="utf-8") as f2:
5         for line in f1:
6             f2.write(re.sub(old_str,new_str,line))
7     os.remove(file)
8     os.rename("%s.bak" % file, file)
9 alter("file1", "admin", "password")
复制代码
复制代码

 

分类:

技术点:

相关文章: