zoukankan      html  css  js  c++  java
  • python--文件操作

      博客地址:http://www.cnblogs.com/yudanqu/

    一、读文件

      要把大象装冰箱,需要分几步?对于读写文件也是这样简单的流程,打开文件、读取文件和关闭文件。

      描述符:文件所有操作涉及到描述符,描述符就是一个光标,读取数据可以从光标开始向后依次读,等等。

    1、打开文件

    open(path, flag[, encoding][, errors])
    • path:要打开文件的路径
    • flag:打开方式
      • r    以只读的方式打开文件,文件的描述符放在文件的开头
      • rb  以二进制格式打开一个文件用于只读,文件的描述符放在文件的开头
      • r+  打开一个文件用于读写,文件的描述符放在文件的开头
      • w   打开一个文件只用于写入,如果该文件已经存在会覆盖,不存在则创建新文件
      • wb 打开一个文件只用于写入二进制,如果该文件已经存在会覆盖,不存在则创建新文件
      • w+ 打开一个文件用于读写,如果该文件已经存在会覆盖,不存在则创建新文件
      • a    打开一个文件用于追加如果文件存在,文件描述符将会放到文件末尾
      • a+  
    • encoding:编码方式(一般utf-8)
    • errors:错误处理(一般不处理)
    1 # 小栗子
    2 f = open(path, "r", encoding="utf-8", errors="ignore")
    3 # ignore 忽略错误,一般不写后两个参数

    2、读文件内容

     1 # 读取文件全部内容
     2 str1 = f.read() # 读文件比较小的,大的内存放不下
     3 
     4 # 读取指定字符数(按字符数)
     5 str2 = f.read(10) # 一个字母和一个汉字都称为一个字符
     6 
     7 # 读取整行,包括"
    "字符
     8 str3 = d.readline()
     9 
    10 # 读取指定字符数
    11 str4 = f.readline(10)
    12 
    13 # 读取所有行并返回列表
    14 str5 = f.readlines()
    15 
    16 # 若给定的数字大于0,返回实际size字节的行数
    17 str6 = f.readlines(25) # 例如25个字节,每行存10个,那么此时读取两行
    18 
    19 # 修改描述符的位置
    20 f.seek(10) # 改到第几个字符的位置

    3、关闭文件

    1 f.close()

    4、小栗子

    # 一个完整的过程
    
    try:
        f1.open(path, "r", encoding="utf-8")
        print(f1.read())
    finally:
        if f1:
            f1.close()
    
    # try...except...else...finally是异常处理的内容,这个例子用到的部分表示,如果打开读取文件部分出错,只要文件存在那么就在最后把文件关闭,这是一个很好的习惯,就比如说在Linux操作系统中,限制打开的文件数不超过1024个如果超过了,文件就打不开了

      当然这样写文件有些繁杂,那么还有更方便的方法:

    # 简单方法:
    
    with open(path, "r", encoding="utf-8") as f2:
        print(f2.read())
    
    # with可以把文件关闭的部分实现,不论我们是否操作,是否有错误,都会在最后帮我们把文件关闭,也避免了我们忘记关文件的困扰

    二、写文件

     1 f = open(path,"w") # 首先以写方式打开文件
     2 
     3 # 将信息写入缓冲区,而并没有直接写入文件当中,也就是说我们在写文件时看文件中,没有信息随时写入
     4 f.write("glabscufn")
     5 
     6 # 刷新缓冲区(要想边写边存入文件的话可以手动刷新缓冲区)
     7 f.flush() # 直接把内部缓冲区的数据立刻写入文件,而不是被动的等待文件关闭自动刷新缓冲区写入
     8 
     9 '''
    10 缓冲区的刷新:
    11 1、文件关闭自动刷新 
    12 2、手动flush刷新 
    13 3、缓冲区满了也可以自动刷新 
    14 4、再有就是遇到'
    '也会刷新
    15 '''
    16 
    17 f.close()

    三、编码与解码

    1、编码

    1 with open(path, "wb") as f1:
    2     str = "asdasdasdasd"
    3     f1.write(str.encode('utf-8')) # 用utf-8编码

    2、 解码

    1 with open(path, "rb") as f2:
    2     data = f2.read()
    3     new_data = data.decode("utf-8")
    4     print(type(data)) # class<byte>
    5     print(type(new_data)) # class<str>
    6 # 主要是在有中文的情况下,其他情况不同的码可能也译码正确
    7 # 如果是二进制的字符串,要记得编码解码

    四、list,tuple,dict,set

     1 import pickle # 数据持久性模块,就是把数据存到磁盘
     2 
     3 #
     4 mylist = [1,2,3,4,5,"sadd"]
     5 f = open(path, "wb")
     6 pickle.dump(mylist, f)
     7 f.close()
     8 
     9 #
    10 f1 = open(path, "rb")
    11 templist = pickle.load(f1)
    12 print(templist)
    13 f1.close()

      作者:渔单渠(yudanqu)

      博客地址:http://www.cnblogs.com/yudanqu/

    作者:渔单渠 微信搜索“小田学Python”
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    进度三
    centos7 安装nodejs 最新版及yarn安装
    sed -i 增加或删减注释#
    解决go编译报错../github.com/golang/freetype/truetype/face.go:13:2: cannot find package "golang.org/x/image/font" in any of:
    解决go打包时报错 models/util/code.go:23:2: cannot find package "github.com/boombuler/barcode" in any of:
    Dockerfile文件说明
    docker exec 报错:error: code = 13 desc = invalid header field value "oci runtime error
    Docker中 /var/lib/docker/overlay2/磁盘爆满,如何解决?
    CentOS7默认安装的/home中转移空间到根目录/
    Docker存储驱动之--overlay2
  • 原文地址:https://www.cnblogs.com/yudanqu/p/9092822.html
Copyright © 2011-2022 走看看