python基础

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

  只读模式(默认) r 

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

  读写模式 r+

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

  只写模式 w

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

  写读模式 w+  

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

    追加写模式 a  

    f=open('a.txt','a')#可以追加写,不存在可以新建,但是不能读
    f.write('a','')
    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()#文件指针移动至最前面
    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) == :
  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-')#以a+模式打开文件
    f.seek()#指针移动到最前面
    res = f.read().replace('a','b')#替换
    f.seek()#再把指针移到最前面,不然指针在末尾,清不掉文件内容了
    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)

  json处理的优劣:json模块只支持str,int ,tuple ,list ,dict的数据类型,因为数据传输到文本是json格式,所以支持的语言也是很多的

python操作pickle

test = {
"port1": {
"username": "小北",
"password": 123456,
"sex": "男",
"action": "sport"
},
"port2": {
"username": "小爱",
"password": 123456,
"sex": "女",
"action": "dance"
}
}
print(type(test)) #<class 'dict'> import pickle
wf = open('pickle_test','wb')
pickle.dump(test,wf)
wf.close()
rf = open('pickle_test','rb')
p = pickle.load(rf)
print(p)
rf.close()
res = pickle.dumps(test)
print(res) print(pickle.loads(res))
#pickle对象操作
test = {
"port1": {
"username": "小北",
"password": 123456,
"sex": "男",
"action": "sport"
},
"port2": {
"username": "小爱",
"password": 123456,
"sex": "女",
"action": "dance"
}
}
class Fuc_test(object):
def __init__(self,doc):
self.doc = doc
p = Fuc_test(test)
print(p)#<__main__.Fuc_test object at 0x000000000241A668> import pickle
wf = open('pickle_test','wb')
pickle.dump(p,wf)#写入文件 rf = open('pickle_test','rb')
res = pickle.load(rf)#读文件
print(res)#<__main__.Fuc_test object at 0x000000000241A6A0>
print(res.doc)#{'port1': {'username': '小北', 'password': 123456, 'sex': '男', 'action': 'sport'}, 'port2': {'username': '小爱', 'password': 123456, 'sex': '女', 'action': 'dance'}}

  pickle的优劣:pickle支持python里的所有数据类型,包括所有对象,但是缺点是只能在python里使用

 

python操作shelve    shelve模块是对pickle的封装,其继承了只能在python里使用的缺点,但实现了dumps,loads多次的情况

import shelve
res =shelve.open('shelve')
#字段新增
res['dict'] = test
print(res.get('dict'))#{'port1': {'username': '小北', 'password': 123456, 'sex': '男', 'action': 'sport'}, 'port2': {'username': '小爱', 'password': 123456, 'sex': '女', 'action': 'dance'}} #字段修改
res['username'] = 'niao'
print(res.get('username'))#niao
res['username'] = 'nihao'#注意字段修改只能在修改整条字段的value进行覆盖,不能改value里面的某一个值
print(res.get('username'))#nihao #字段删除
res['password'] = ''
print(res.get('password'))#
res.pop('password')
print(res.get('password'))#None #字段查看
for i,j in res.items():#循环打印res对象中所有键值对
print(i,j)
res.close()  #关闭对象

  shelve模块的优劣:一样是只能对python操作,其本身对数据增加了key,value,key必须为字符串,key可以为任何数据类型,只要是持久化成为了其优势

文件处理小妙招

  复制文件内容

  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本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。

python学习之文件读写,序列化(json,pickle,shelve)的更多相关文章

  1. python学习之文件读写入门(文件读的几种方式比较)

    1.文件读写简单实例:(以w写的方式打开一个文件,以r读一个文件) # Author : xiajinqi # 文件读写的几种方式 # 文件读写 f = open("D://test.txt ...

  2. Java学习笔记-文件读写和Json数组

    Java文件读写 Java中I/O流对文件的读写有很多种方法,百度后主要看了以下三种 第一种方式:使用FileWriter和FileReader,对文件内容按字符读取,代码如下 String dir ...

  3. Day 4-5 序列化 json & pickle &shelve

    序列化: 序列化是指把内存里的数据类型转变成字符串,以使其能存储到硬盘或通过网络传输到远程,因为硬盘或网络传输时只能接受bytes. 反序列化: 把字符转成内存里的数据类型. 用于序列化的两个模块.他 ...

  4. 序列化 json pickle shelve configparser

    一 什么是 序列化 在我们存储数据或者 网络传输数据的时候,需要对我们的 对象进行处理,把对象处理成方便我们存储和传输的 数据格式,这个过程叫序列化,不同的序列化,结果也不相同,但是目的是一样的,都是 ...

  5. 保存数据到文件的模块(json,pickle,shelve,configparser,xml)_python

    一.各模块的主要功能区别 json模块:将数据对象从内存中完成序列化存储,但是不能对函数和类进行序列化,写入的格式是明文.  (与其他大多语言交互的类型) pickle模块:将数据对象从内存中完成序列 ...

  6. Python(序列化json,pickle,shelve)

    序列化 参考:https://www.cnblogs.com/yuanchenqi/articles/5732581.html # dic = str({'1':'111'}) # # f = ope ...

  7. Python学习第十二课——json&pickle&XML模块&OS模块

    json模块 import json dic={'name':'hanhan'} i=8 s='hello' l=[11,22] data=json.dumps(dic) #json.dumps() ...

  8. python学习之文件读写操作

    open函数 在使用文件之前,需要先打开,即使用open函数 如: files=open("文件路径","操作方式") 解释如下: (1.files:为文件对象 ...

  9. python序列化: json & pickle & shelve 模块

    一.json & pickle & shelve 模块 json,用于字符串 和 python数据类型间进行转换pickle,用于python特有的类型 和 python的数据类型间进 ...

随机推荐

  1. 最新 海看java校招面经 (含整理过的面试题大全)

    从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.海看等10家互联网公司的校招Offer,因为某些自身原因最终选择了海看.6.7月主要是做系统复习.项目复盘.LeetCode ...

  2. BeginLinux Programming chapter16: X11桌面系统简介

    当前两个最流行的linux desktop environment: GNOME 和KDE, 两者对应的图形库分别是 GTK+ 和 QT. GNOME与KDE与X11的关系: X defines no ...

  3. [转帖]Docker中的时区问题处理

    Docker中的时区问题处理 这两天在打docker的时候,发现自己的容器启动之后,里面date -R的输出时区是UTC,总是和北京时间差了8个小时. 作者:云平台运维开发来源:今日头条|2019-0 ...

  4. 新浪sae对storage的文档进行读写操作

    有的人喜欢将一些数据写在服务器的文件里面,并不喜欢存在mysql里,但新浪sae却不支持对本地文件进行操作. 不过sae拓展了一个storage的服务,可以将一些静态文件放在上面.本文不介绍文件的上传 ...

  5. go for range 可以方便的对slice 切片或者 map 进行迭代循环

    package main import (     "fmt"     "math/rand"     "time" ) func main ...

  6. SAS学习笔记11 SAS宏

    宏是一个被储存的文本,用一个名字识别它.最简单的宏就像一个宏变量一样工作,但复杂的宏可以完成许多宏变量不能做的事. 定义宏的语句格式为: %macro 宏名称: 宏文本 %mend <宏名称&g ...

  7. 15_IO流

    IO流 流 流的概念 流(stream)是指一连串流动字节/字符,按照先进先出的方式发送的信息的通道中. 数据源:流入通道中的数据的来源 目的地:流出通道的数据的目的地   输入流和输出流 数据源的数 ...

  8. Python操作Redis(转)

    原文1:https://cloud.tencent.com/developer/article/1151834 原文2:https://www.cnblogs.com/zhaohuhu/p/91406 ...

  9. gRPC Golang/Python使用

    gRPC Golang/Python使用 以前开发网站都是用http协议,学过TCP/IP协议的人都知道,在传输层TCP的基础上,应用层HTTP就是填充了一定规则的文本. 1.gRPC使用和介绍 工作 ...

  10. Docker使用整理

    Docker技术的基础: namespace,容器隔离的基础,保证A容器看不到B容器. 6个名空间:User,Mnt,Network,UTS,IPC,Pid cgroups,容器资源统计和隔离.主要用 ...