码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Python - 文件操作(1)


    CSDN话题挑战赛第2期
    参赛话题:学习笔记

    Python学习 - 语法入门:https://blog.csdn.net/wanzijy/article/details/125287855
    Python学习 - 数据类型:https://blog.csdn.net/wanzijy/article/details/125341568
    Python学习 - 流程控制:https://blog.csdn.net/wanzijy/article/details/125400906
    Python学习 - 运算符(操作符):https://blog.csdn.net/wanzijy/article/details/125387919
    Python学习 - 列表:https://blog.csdn.net/wanzijy/article/details/125457990
    Python学习 - 字典:https://blog.csdn.net/wanzijy/article/details/125567225
    Python学习 -元组和集合:https://blog.csdn.net/wanzijy/article/details/125577609
    Python学习 - 函数(1):https://blog.csdn.net/wanzijy/article/details/125669084
    Python学习 - 函数(2):https://blog.csdn.net/wanzijy/article/details/125739981
    Python学习 - 类与对象:https://blog.csdn.net/wanzijy/article/details/125826952
    Python学习 - 面向对象之封装:https://blog.csdn.net/wanzijy/article/details/125902925
    Python学习 - 面向对象之继承:https://blog.csdn.net/wanzijy/article/details/125963829
    Python学习 - 面向对象之多态:https://blog.csdn.net/wanzijy/article/details/127140632
    Python - 文件操作(1):https://blog.csdn.net/wanzijy/article/details/127099071
    Python - 文件操作(2):https://blog.csdn.net/wanzijy/article/details/127150189
    Python学习 - 垃圾回收、特殊方法和模块:https://blog.csdn.net/wanzijy/article/details/126202999
    Python学习 - 异常处理:https://blog.csdn.net/wanzijy/article/details/126803672

    1. 简介

    通过 Python 程序来对计算机中的文件进行增删改查的操作
    I/O (Input / Output)

    操作文件的步骤:

    1. 打开文件
    2. 对文件进行各种操作(读、写),然后保存
    3. 关闭文件

    2. 打开文件

    open(file, encoding=None)

    • 打开一个文件的方法,会返回这个文件的对象
    • file:要打开的文件的名字(路径);如果目标文件和当前文件在同一级目录下,则直接使用文件名即可;如果不在同一目录下,要写上路径
      在 windows 使用路径时,可以使用 “ / ” 来代替 “ \ ”,或者可以使用 “ \ ” 来代替 “ \ ”,又或者使用原始字符串(即在字符串前加个“r”)
    • encoding 编码格式,出现编码问题时,可以将其设置为 “ uft-8 ” 或者其他编码格式
    file_name = 'Demo.txt'
    file_obj = open(file_name, encoding='utf-8')
    

    在表示路径时,可以使用 “. .” 来返回一级目录
    如果目标文件距离当前文件比较远,此时可以使用绝对路径(要从磁盘的根目录开始写)

    3. 关闭文件

    当我们获取文件对象以后,所有的对文件的操作,都是对这个对象的操作
    当关闭文件之后,就不能再通过该对象操作文件

    关闭方式:

    1. 调用 close() 方法
    file_name = 'Demo.txt'
    file_obj = open(file_name, encoding='utf-8')
    print(file_obj)
    file_obj.close()
    
    1. with … as :
      在 with 范围内可以直接使用打开的文件对象,但是在 with 范围外则无法使用
    with open(file_name, encoding='utf-8') as file_obj:
        print(file_obj)
    

    结合以前学的 try-catch 语句,那么正规的打开文件的代码应该是:

    file_name = 'Demo.txt'
    
    try:
        with open('asas', encoding='utf-8') as file_obj:
            print(file_obj)
    except FileNotFoundError:
        print(f'{file_name}文件不存在')
    

    4. 读取文件

    当调用 open() 来打开文件时,可以将文件分成两种类型:

    • 纯文本文件(使用 utf-8 等编码编写的文本文件)
    • 二进制文件(图片、mp3、ppt 等)

    open() 打开文件时,默认是以文本形式打开的,但是 open() 默认的编码为“None”
    当处理文本文件时,必须要指定文件的编码

    file_name = 'Demo.txt'
    try:
        with open(file_name, encoding='utf-8') as file_obj:
            content = file_obj.read()
            print(content)
    except FileNotFoundError:
        print(f'{file_name}文件不存在')
    

    如果直接调用 read(),会将文本中的所有内容全部一次性读取出来
    但是如果文件较大的话,会将内容加载到内存中,容易导致内存泄露

    read()

    • 可以接收一个 “ size ” 作为参数,该参数用来指定要读取的字符的数量
    • 默认值是 “-1”,表示读取全部内容
    • “size” 的单位是字符
    • 如果连续的调用 read(size),每一次读取都是从上次读取到的位置开始读取;如果字符的数量小于传入的 size 值,则会读取剩下的全部;如果语句读取到了文件的最后,则会返回 ’’(空串)
    • 如果想知道文件中的 size 是多少字符,可以调用 len() 方法进行查看

    当读取大文件时,可以利用 size 参数和循环来读取

    file_name = 'Demo.txt'
    try:
        with open(file_name, encoding='utf-8') as file_obj:
            chunk = 50
            while True:
                content = file_obj.read(chunk)
                if(not content):  #  空串会自动转为False
                    break
                print(content, end='')  #  end='' 的意思是将换行去掉
    except FileNotFoundError:
        print(f'{file_name}文件不存在')
    

    readlines() 直接读取一行,但是会一次性将读取到的内容返回,将其封装到一个列表中返回

    import pprint
    file_name = 'Demo.txt'
    try:
        with open(file_name, encoding='utf-8') as file_obj:
            pprint.pprint(file_obj.readlines())
    except FileNotFoundError:
        print(f'{file_name}文件不存在')
    

    也可以通过 for 循环去读取文件对象中的内容

    file_name = 'Demo.txt'
    try:
        with open(file_name, encoding='utf-8') as file_obj:
            for t in file_obj:
                print(t, end='')
    except FileNotFoundError:
        print(f'{file_name}文件不存在')
    
  • 相关阅读:
    <HarmonyOS第一课>ArkTS开发语言介绍——闯关习题及答案
    口袋参谋:如何快速下载直通车图,这个方法你用过吗?
    13.DesignForSip[Apd]\1.DownrevSip[Apd]17.2-17.4to16.6
    记一次 .NET 某电力系统 内存暴涨分析
    SCALA基础
    扩展欧几里得算法的实现
    ArkUI框架,Flex布局,基础组件及封装,父子组件的双向绑定
    基于实现地图弹窗轮播功能及遇到的问题解决
    mac使用VMware Fusion安装Centos 7系统
    解释器风格架构C# 代码
  • 原文地址:https://blog.csdn.net/wanzijy/article/details/127099071
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号