• python专题文件操作


    一 前言

    本篇文章主要对文件操作进行说明,知识追寻者创作必属精品,读完本篇你将获得基础的文件操作能力,深入理解文件操作API,基础真的很重要,不管学什么知识,故看知识追寻者的专题系列真的很不错。

    二 open函数介绍

    2.1 open函数概览

    open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)

    1. file 可以是给定的文本文件或者是文件字符串形式的名称
    2. mode 模式是操作文件以何种方式打开,比如读,写模式,读取为二进制等;
    3. buffering 是缓存机制(可选参数),设置为0为关闭缓存;设置为1表示行缓存,必须是在文本模式下执行;设置值 大于1 表示固定值的块缓存;不给定参数,系统会设置默认缓存,通常二进制文件是固定大小的块缓存,大小为4096或者8192;
    4. encoding 表示设置编码或者解码,默认的编码解码是跟随平台,必须是文本模式下可执行;用户可以自定义,
    5. errors 可选操作,表示指定如何处理编码异常;如果设置为ignore,可能会造成数据丢失;
    6. newline 表示对换行的具体操作,比如 ' ' , ' ' , ' ',必须在文本模式下进行;
    7. closefd 如果设置会False 当文件关闭时,文件的描述会一直打开,造成内存泄漏;通常会在open方法前面加with解决此类问题,否则需要调用close()方法关闭句柄;

    2.2 mode 模式介绍

    基础模式如下,在不冲突的情况下可以对文件的模式进行自由组合,比如 wb表示以二进制文件形式打开文件进行写操作;

    模式 含义
    t 文本模式 (默认)
    b 二进制模式
    w 写入模式
    x 创建一个新的文件,并且写入数据
    a 在已经存在的文件末尾追加内容
    + 打开磁盘文件对其进行更新操作,可以是读或者写
    U 另起一行模式,已经过时,会引起异常

    2.3 文件方法介绍

    方法名称 方法说明
    read(size) 读取文件,size为可选参数为-1或者省略表示读取全部内容
    readline() 从文件中读取一行
    readlines() 读取多行
    write(string) 写入字符串到文件,返回字符数
    tell() 返回文件当前位置
    close() 关闭文件
    flush() 手动冲刷缓存至底层

    三 读文件操作

    3.1 准备工作

    在工程目录下的base目录文件夹下创建一个dir文件夹,专门用于存储文件;创建一个zszxz.txt 文件 内容如下

    我以星辰送大海
    我以盏杯敬明月
    

    3.2 读取整个文件

    1. 指定文件路径path
    2. 指定模式r 为读操作
    3. 指定编码格式为utf-8
    4. 调用read()方法
    path = "dirs/zszxz.txt"
    with open(path, 'r', encoding='UTF-8') as file_obj:
        content = file_obj.read()
        print(content.rstrip())
    

    输出结果

    我以星辰送大海
    我以盏杯敬明月
    
    

    3.3读取单行

    使用readline()方法会读取单行,对于整个文件需要进行多次读取;

    path = "dirs/zszxz.txt"
    with open(path, 'r', encoding='UTF-8') as file_obj:
        content_1 = file_obj.readline()
        print(content_1.rstrip())
        content_2 = file_obj.readline()
        print(content_2.rstrip())
    

    输出结果

    我以星辰送大海
    我以盏杯敬明月
    
    

    3.3 多行读取

    1. 使用readlines()方法返回一个列表
    2. 使用循环遍历读取
    path = "dirs/zszxz.txt"
    with open(path, 'r', encoding='UTF-8') as file_obj:
        lines = file_obj.readlines()
        for line in lines:
            print(line.rstrip())
    

    输出结果

    我以星辰送大海
    我以盏杯敬明月
    

    3.4 按行读取

    直接对文件进行迭代,能简化代码,提高效率;

    path = "dirs/zszxz.txt"
    with open(path, 'r', encoding='UTF-8') as file_obj:
        for line in file_obj:
            print(line.rstrip())
    

    四 写操作

    1. path 指定文件路径
    2. mode 模式为w 表示写入数据
    3. 执行write()方法
    4. 返回count为写如的字符数

    写入全部数据

    # -*- coding: utf-8 -*-
    
    path = "C:mydatageneratorzszxz.txt"
    with open(path,'w',encoding='UTF-8') as file_obj:
    	count = file_obj.write("happily reading the article of zszxz")
    	print(count)
    

    返回结果如下,说明写入了36个字符;

    36
    

    五 获取当前位置

    1. path 指定文件路径
    2. mode 模式为 r表示读
    3. 调用readline()方法 表示读取行
    4. 调用tell()方法获取读取文件当前位置
    path = "dirs/zszxz.txt"
    with open(path, 'r', encoding='UTF-8') as file_obj:
        line = file_obj.readline()
        position = file_obj.tell()
        print(position)
        print(line.rstrip())
    

    输出结果

    23
    我以星辰送大海
    
  • 相关阅读:
    ES 2016+
    git-svn for mac
    Linux系统下安装rz/sz命令及使用说明
    Nginx location指令匹配顺序规则
    nginx修改配置后不生效的问题
    ssh and scp从远程服务器下载文件
    安装yii2 框架遇到的问题
    php添加openssl扩展
    GitHub Token for composer
    centos7+nginx+php+mysql环境搭建
  • 原文地址:https://www.cnblogs.com/zszxz/p/12228038.html
Copyright © 2020-2023  润新知