python学习之文件读写,json处理

python基础

 

文件读写  凡是读写文件,所有格式类型都是字符串形式传输

  只读模式(默认) r 

    f=open('a.txt','r')#文件不存在会报错
    print(f.read())#获取到文件所有内容
    f.close()#关闭文件

  读写模式 r+

    f=open('a.txt','r+')#文件不存在会报错,可读可写可追加
    f.write('123')#
    f.close()

  只写模式 w

    f=open('a.txt','w')#w会一打开文件未被清空,如果文件不存在会新建
    f.write('a','123456')
    f.close()#关闭文件

  写读模式 w+  

    f=open('a.txt','w+')#w会一打开文件未被清空,如果文件不存在会新建
    print(f.read())#
    f.close()

    追加写模式 a  

    f=open('a.txt','a')#可以追加写,不存在可以新建,但是不能读
    f.write('a','123456')
    f.close()#关闭文件

  追加读模式 a+

    f=open('a.txt','a+')#a+可读可写可追加文件内容,如果文件不存在会新建,
    print(f.read())#获取到文件所有内容
    f.write('a','123456\n')#\n换行符,从文件取到代码中会隐藏换行符用strip方法处理
    f.write('b','123456\n')
    f.seek(0)#文件指针移动至最前面
    f.flush()#清缓冲区,直接写入磁盘中,这样做会直接看到磁盘文件的数据,但是在正式环境中会造成大量io
    f.close()#关闭文件

    #如果有中文在f=open('a.txt','r',encoding='utf-8')

    #读取二进制文件在模式中加b 如f= open('123.avi','rb+')

    #f.flush()表示立刻把缓存区中的数据写到磁盘中

    #"U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用)

  read(write),readline(writeline),readlines(writelines)

    read()       获取文件所有内容到内存,如果是大文件内存放不下会造成溢出,同理write 

    print(f.readlines())  \     获取文件所有内容,并以每行字符串形式输出。如果是大文件内存放不下会造成溢出。内置for循环,同理writelines,如果是字符串,直接传字符串不用readlines或者

               writelines,效率低

    print(f.readline())   获取文件首行内容,并以字符串形式输出,文件指针标记此次读取内容之后,如果再次readline,输出后面一行的内容,同理writeline

  文件读写与for  高效读取文件内容

    一、

    f=open('a.txt',encoding='utf-8')  #f称为文件对象,文件句柄
    for line in f:
      print(line)

    二、

 
 
    f=open('a.txt',encoding='utf-8')
    while True:
       line = f.readline()
       if line != '':
           print(line)
       else:
           break
   f.close()

     三、 

   f = open('product.json', 'r', encoding='utf-8')
    res = f.read()
   if len(res) == 0:
      print("文件为空")
   else:
      print(res)

  文件指针    

    f.seek(0)   #文件指针移动至最前面

    f,tell()      #记录当前指针位置

#python监控access.log文件及tell与seek的混用
import
time point = 0 while True: with open('access.log', encoding='utf-8') as f: if f: point_action = f.seek(point) all_ip = [] for i in f: ip = i.split("-")[0] all_ip.append(ip) point = f.tell() all_ip_set = set(all_ip) for i in all_ip_set: if all_ip.count(i) > 200: print("被封ip为%s,次数为%s" % (i, all_ip.count(i))) time.sleep(60)

 

  文件修改

    方法1  简单粗暴小文件适用

    f = open('a.txt',encoding='utf-8')#打开文件
    res = f.read().replace('a','b')#读取文件内容,把文件中所有a替换成b
    f.close()#关闭文件
    f = open('a.txt','w',encoding='utf-8')#以w模式清空文件
    f.write(res)#再把内存中的修改好的文件写入文件句柄中,从而达到文件修改的目的
    f.close()

    方法2 简单粗暴,小文件适用

    f = open('a.txt','a+‘,encoding='utf-8')#以a+模式打开文件
    f.seek(0)#指针移动到最前面
    res = f.read().replace('a','b')#替换
    f.seek(0)#再把指针移到最前面,不然指针在末尾,清不掉文件内容了
    f.truncate()#清空文件内容
    f.write(res)#
    f.close()

    方法3 适用于大文件

    import os #导入模块
    f1 = open('a.txt',encoding='utf-8')#打开原来文件
    f2 = open('a.txt.bak','w',encoding='utf-8')打开修改文件
    for line in f:#循环
      new_line = line.replace('a','b')#替换
      f2.write(new_line)#写入修改文件
    f1.close()
    f2.close()
    os.remove('a.txt')#删除文件
    os.rename('a.txt.bak','a.txt')#文件重命名

  with用法   用with不需要close方法,with自动关闭 

'''将a文件的内容写到b文件中'''
with open('a.txt','r') as rf,open('b.txt','a+') as wf :
    for line in rf.read():
        wf.write(line)

python处理json  查看json格式是否有问题 www.bejson.com

  r = '''{"a":1,"b":2,"c":3}'''#json串就是字符串

  import json #导入json模块

  res = json.loads(r)#把json串变成字典,与load区别在于loads后面参数对应的是字符串,简单来说使用load可以直接操作数据库,不用read了。使用loads可以用read写到内存再进行下一步对数据库的操作

  res2=json.dumps(res)#把字典变成json串,与dump区别在于dumps后面参数对应的是字符串,简单来说使用dump可以直接操作数据库,不用read了。使用dumps可以用read写到内存再进行下一步对数据库的操作

     dumps参数  #indent缩进,中文避免乱码,ensure_ascii=False

       res2=json.dumps(res,indent=4,ensure_ascii=False)

文件处理小妙招

  复制文件内容

  with open('b.txt', 'w', encoding='utf-8') as f2:
      with open('a.txt', 'r', encoding='utf-8') as f1:
          for line in f1:
              f2.write(line)

   取文件内容

    s = ''
    f = open('product.txt', 'r', encoding='utf-8')
    for line in f:
        if line == '':
            print("内容为空")
        else :
            s = s + line
    print(s)

 版权声明:本文原创发表于 博客园,作者为 RainBol 本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。

转载于:https://www.cnblogs.com/RainBol/p/9573361.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值