zoukankan      html  css  js  c++  java
  • 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
    我以星辰送大海
    
  • 相关阅读:
    67. Add Binary
    66. Plus One
    64. Minimum Path Sum
    63. Unique Paths II
    How to skip all the wizard pages and go directly to the installation process?
    Inno Setup打包之先卸载再安装
    How to change the header background color of a QTableView
    Openstack object list 一次最多有一万个 object
    Openstack 的 Log 在 /var/log/syslog 里 【Ubuntu】
    Git 分支
  • 原文地址:https://www.cnblogs.com/zszxz/p/12228038.html
Copyright © 2011-2022 走看看