zoukankan      html  css  js  c++  java
  • 040 文件 一般使用

    简介

    • 长久保存信息的一种数据信息集合
    • 常用操作
      • 打开关闭(文件一旦打开,需要关闭操作)
      • 读写内容
      • 查找

    open()

    简介

    • 负责打开文件
    • open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
      • file: 必须有,表示文件的路径和名称
      • mode: 表明文件用什么方式打开

    参数表

    参数 释义
    r 以只读方式打开(默认)
    w 写方式打开,会覆盖以前的内容
    x 创建方式打开,若文件已经存在,会抛出 FileExistsError
    a 以追加的方式对文件内容进行写入
    b 二进制方式写入
    t 文本方式打开(默认)
    + 可读写
    U universal newline mode (deprecated)

    举例

    >>> f = open("text.txt", 'w')  # 使用了 w,若目录中没有所指定的文件,会先自动创建
    >>> f.close()  # f 也称“文件句柄”
    >>> 
    

    with 语句

    • with 语句使用的技术是一种称为上下文管理协议的技术(ContextManagementProtocal)
    • 自动判断文件的作用域,自动关闭不再使用的已打开的文件句柄
    >>> with open("text.txt") as f:
    ...   pass
    ...
    >>> 
    

    写操作

    write(string)

    • 向文件写入一个字符串或字节流
    • 每次写入后,都会记录一个“写入指针”
    • 该方法可以反复调用,每次都在上回记录的“写入指针”后写入内容,直至文件被关闭
    >>> with open("text.txt", 'a') as f:
    ...   f.write("风急天高猿啸哀
    ")
    ...   f.write("渚清沙白鸟飞回
    ")
    ...   f.write("无边落木萧萧下
    ")
    ...   f.write("不尽长江滚滚来
    ")
    ...
    8
    8
    8
    8
    >>> 
    

    writeline(lines)

    • lines 代表一个列表
    • 功能:直接将列表类型的各元素连接起来写入文件
    >>> lines = ["万里悲秋常作客
    ", "百年多病独登台
    ", "艰难苦恨繁霜鬓
    ", "潦倒新停浊酒杯
    "]
    >>> with open("text.txt", 'a') as f:
    ...   f.writelines(lines)
    ...
    >>> 
    

    区别

    • write 函数的参数只能是字符串
    • writerlines 的参数可以是字符串,也可以是字符序列

    读操作

    read()

    • f.read(size=-1)
    • 从文件中读入整个文件内容
    • 参数可选,如果给出,则读入前 size 长度的字符串或字节流
    >>> with open("text.txt") as f:
    ...   f.read()
    ...
    '风急天高猿啸哀
    渚清沙白鸟飞回
    无边落木萧萧下
    不尽长江滚滚来
    万里悲秋常作客
    百年多病独登台
    艰难苦恨繁霜鬓
    潦倒新停浊酒杯
    '
    >>> 
    
    >>> f = open("text.txt")
    >>> f.read(8)
    '风急天高猿啸哀
    '
    >>> f.read(8)
    '渚清沙白鸟飞回
    '
    >>> f.close()
    >>> 
    

    readline()

    • f.readline(size = -1)
    • 从文件中读入一行内容
    • 参数可选,如果给出,则读入该行前 size 长度的字符串或字节流
    >>> f = open("text.txt")
    >>> f.readline()
    '风急天高猿啸哀
    '
    >>> f.readline()
    '渚清沙白鸟飞回
    '
    >>> f.close()
    >>> 
    

    readlines()

    • f.readlines(hint=-1)
    • 从文件中读入所有行,以每行为元素形成一个列表
    • 参数可选,如果给出,读入 hint
    >>> with open("text.txt") as f:
    ...   for line in f.readlines():
    ...     print(line, end='')
    ...
    风急天高猿啸哀
    渚清沙白鸟飞回
    无边落木萧萧下
    不尽长江滚滚来
    万里悲秋常作客
    百年多病独登台
    艰难苦恨繁霜鬓
    潦倒新停浊酒杯
    >>> 
    
    >>> with open("text.txt") as f:
    ...   for line in list(f):  # 文件句柄可以强制转成 list
    ...     print(line, end='')
    ...
    风急天高猿啸哀
    渚清沙白鸟飞回
    无边落木萧萧下
    不尽长江滚滚来
    万里悲秋常作客
    百年多病独登台
    艰难苦恨繁霜鬓
    潦倒新停浊酒杯
    >>> 
    

    “位置”的查询与移动

    tell()

    • 显示文件“读写指针”的当前位置
    >>> f = open("text.txt")
    >>> f.tell()
    0
    >>> f.readline()
    '风急天高猿啸哀
    '
    >>> f.tell()
    16
    >>> f.read(4)
    '渚清沙白'
    >>> f.tell()
    24
    >>> 
    
    • readtell 使用的不是一个单位

    seek(cookie, whence=0)

    • 改变当前文件操作指针的位置
    • whence
      • 0:文件开头(默认)
      • 1:从文件当前位置开始偏移
      • 2:文件结尾
    • 移动的单位是字节(byte)
    • 一个汉字由若干个字节构成,一般为 2,也有例外
    • 返回文件只针对当前位置
    >>> f = open("text.txt")
    >>> f.read(4)
    '风急天高'
    >>> f.tell()
    8
    >>> 
    >>> f.seek(0)
    0
    >>> f.readline()
    '风急天高猿啸哀
    '
    >>> 
    >>> f.seek(8, 0)
    8
    >>> f.readline()
    '猿啸哀
    '
    >>> 
    
  • 相关阅读:
    第35条:注解优先于命名模式
    Apache Shiro入门实例
    第34条:用接口模拟可伸缩的枚举
    Lua数组排序
    C++多态性的理解
    爱推软件
    VMProtect使用小计【一】
    android软件开发之webView.addJavascriptInterface循环渐进【二】
    cocos2dx如何添加popScene的场景动画
    Cocos2d-x 3.0 cocostudio骨骼动画的动态换肤
  • 原文地址:https://www.cnblogs.com/yorkyu/p/12088157.html
Copyright © 2011-2022 走看看