[Python进阶] Python处理txt文件:open

news2024/9/20 6:25:20

7.1 Python处理txt文件:open

在Python中,通过open函数可以打开一个文件,创建一个file对象,然后对该对象进行读写。
函数语法:

open(name[, mode[, buffering]…])
参数说明:
name:文件名
mode:文件打开的模式:只读,写入,追加等。这个参数是非强制的,默认文件访问模式为只读®。常见的模式及其说明如下:

模式操作文件不存在是否覆盖
r只读报错-
r+读写报错
w只写创建
w+读写创建
a只写创建否,追加写
a+读写创建否,追加写

buffering : 如果 buffering 的值被设为 0,就不会有寄存。如果 buffering 的值取 1,访问文件时会寄存行。如果将 buffering 的值设为大于 1 的整数,表明了这就是的寄存区的缓冲大小。如果取负值,寄存区的缓冲大小则为系统默认。
encoding:指定的编码格式
file 对象方法:
file.read([size]):size 未指定则返回整个文件,读到文件尾时返回空字串。
file.readline():返回一行。
file.readlines([size]) :返回包含size行的列表, size 未指定则返回全部行。
f.write(“hello\n”):如果要写入字符串以外的数据,先将他转换为字符串。
f.tell():返回一个整数,表示当前文件指针的位置(就是到文件头的字节数)。
f.seek(偏移量,[起始位置]):用来移动文件指针。

偏移量: 单位为字节,可正可负
起始位置: 0 - 文件头, 默认值; 1 - 当前位置; 2 - 文件尾
f.close() 关闭文件

7.1.2 打开txt文件并读取内容

1、我们先新建一个txt文本文件,写入内容如下:

离离原上草,一岁一枯荣。
野火烧不尽,春风吹又生。

2、保存该文件,以GBK编码方式。下图中的ANSI编码指的是当地的默认编码,在中国就是GBK
在这里插入图片描述

3、一般我们是通过上下文管理器来打开文件的,这样就可以避免忘记手动关闭文件。我们可以通过下面的代码读取并输出txt内容:

with open('test.txt') as f:
    print(f.read())

离离原上草,一岁一枯荣。
野火烧不尽,春风吹又生。

这种打开的方式,并没有指定encoding编码,默认使用GBK打开。如果txt文件默认的是GBK则可以正常打开,否则会报错。我们将之前的txt文件的编码改成utf-8后则报错如下:

Traceback (most recent call last):
File “E:\Syncdisk\PythonFiles\t5.py”, line 2, in
print(f.read())
UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0xa6 in position 4: illegal multibyte sequence

这个时候,我们就可以指定open函数中的encoding参数,如下:

with open('test.txt', encoding='utf-8') as f:
    print(f.read())

那么现在又有个新问题了,对于不知道txt文件编码格式的,我们怎么打开呢?总不可能每次都手动打开txt文件,查看编码格式之后再调用open函数来打开吧。
这里我们可以通过检测编码,得到编码后再通过检测到的编码格式解码结果:

from chardet import detect


def myread(fn):
    with open(fn, mode='rb') as f:
        Bytes = f.read()
        encode = detect(Bytes)['encoding']
        if encode:
            if encode.lower() in ['gbk', 'gb2312']:
                return Bytes.decode('GB2312', 'ignore')
            elif encode.lower() in ['utf-8-sig']:
                return Bytes.decode('utf-8-sig', 'ignore')
            else:
                return Bytes.decode('utf-8', 'ignore')


print(myread('test.txt'))

离离原上草,一岁一枯荣。
野火烧不尽,春风吹又生。

7.1.3 将文本写入到txt文件中

with open('test.txt', mode='w+') as f:
    f.write("""
    i love python
    i love python
    i love python
    """)
    f.seek(0)  # 这里需要将文件指针指向文件头,否则下面的read函数无法读取文件。
    print(f.read())

i love python
i love python
i love python

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1354711.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

你真的知道2024程序员搞钱新姿势吗?

2023年已经过去,2024的序曲已经奏响!回顾2023,我们经历了降薪裁员的大趋势,身为程序员也有点惶惶不可终日,害怕会失去工作,害怕面对家人无奈的模样,害怕跟不上时代的步伐,沦为被大环…

Minitab 各版本安装指南

Minitab下载链接 https://pan.baidu.com/s/1PLqocknkoRGGI9lbV3e45A?pwd0531 1.鼠标右击【Minitab 21(64bit)】压缩包(win11及以上系统需先点击“显示更多选项”)选择【解压到 Minitab 21(64bit)】。 2.打开解压后的文件夹,鼠标右击【setu…

众和策略安全可靠:如何区分大盘股和小盘股?大盘股指数有哪些?

股票根据流转盘能够划分为大盘股、中盘股、小盘股这三大类,那么,怎么区别大盘股和小盘股?大盘股指数有哪些?下面众和策略为我们准备了相关内容,以供参考。 怎么区别大盘股和小盘股? 根据个股的市值来区别…

使用异构图学习破解推荐系统 - 第 1 部分

Lokesh Sharma – Medium 一、说明 所以,这是独家新闻:异质图拥有一个充满潜力的世界,而常规图却无法做到这一点。传统的同构图很难处理不同关系和边类型的复杂性。现在是大炮的时候了——先进的架构可以解决具有多种边缘和关系类型的数据集的…

Go后端开发 -- Go Modules

Go后端开发 – Go Modules 文章目录 Go后端开发 -- Go Modules一、什么是Go Modules?二、GOPATH的工作模式1.GOPATH模式2.GOPATH模式的弊端 三、Go Modules模式创建项目1.go mod命令2.go mod环境变量3.使用Go Modules初始化项目4.修改模块的版本依赖关系 四、Go Modules下impo…

快速实现前后端表单交互(minui)

(1)使用minui快速生成表单 (2)修改样式,将生成的html文件发送给后端 (3)前后端交互(后端如何处理不太清楚) 表单初始化:新增修改(包括查看&…

如何远程修改plc程序?

​在工业自动化领域中,PLC(可编程逻辑控制器)是不可或缺的一部分。然而,传统方式下修改PLC程序需要亲临现场,这不仅耗时,还增加了成本。那么有没有一种更加高效、便捷的方法呢?答案是肯定的&…

【REST2SQL】03 GO读取JSON文件

REST2SQL需要一些配置信息,用JSON文件保存,比如config.json 1 创建config.json配置文件 {"hostPort":"localhost:5217","connString":"oracle://blma:5217127.0.0.1:1521/CQYH","_oracle":"ora…

6591A便携式光伏组串测试仪

01 6591A便携式光伏组串测试仪 产品综述: 6591A主要用于1500V光伏组串的测试,能够方便、快速的测试1500V光伏组串在自然光照下的工作特性,可为太阳能电站设计、验收、维护提供测试保障,是电站建设单位、质检部门、生产厂家、科研…

Navicat 技术干货 | 聚合查询的介绍

基础 SQL 查询可以检索、插入、更新和删除记录,而聚合查询可通过提供求和、平均值或最大/最小值等的大型结果集,将数据库交互提升到一个新的水平。本文中,我们将探索聚合 SQL 查询的基础知识,并研究如何有效的利用他们来分析和汇总…

边坡安全监测预警系统——高效率

安装边坡安全监测预警系统的原因是多方面的,涉及到社会效益、经济效益和环境效益。随着国家基础设施建设的快速发展,边坡安全监测预警系统的需求越来越迫切。 边坡安全监测预警系统对于保障人民生命财产安全具有重要意义。在山区、丘陵地带,边…

牛客网面试题知识点记录-03

1.题目讲解重写后子类调用父类的方法总结:当子类重写了父类方法A,父类方法直接调用被重写的父类方法后,调用的是子类的重写的父类方法A。 class Test {public static void main(String[] args) {System.out.println(new B().getValue());}st…

安科瑞电化学储能电能管理系统解决方案——安科瑞 顾烊宇

1 概述 在我国新型电力系统中,新能源装机容量逐年提高,但是新能源比如光伏发电、风力发电是不稳定的能源,所以要维持电网稳定,促进新能源发电的消纳,储能将成为至关重要的一环,是分布式光伏、风电等新能源消…

Java中的异常如何处理?

在Java编程中,异常是一种在程序执行期间发生的意外情况。学会处理异常是编写健壮、可靠程序的关键之一。 为什么需要异常处理? 异常处理允许程序在发生错误时进行优雅而有序的处理,而不是导致程序崩溃。这有助于提高程序的可维护性和用户体…

Alibaba Cloud Linux镜像操作系统超详细测评!兼容CentOS

Alibaba Cloud Linux是基于龙蜥社区OpenAnolis龙蜥操作系统Anolis OS的阿里云发行版,针对阿里云服务器ECS做了大量深度优化,Alibaba Cloud Linux由阿里云官方免费提供长期支持和维护LTS,Alibaba Cloud Linux完全兼容CentOS/RHEL生态和操作方式…

Vue: 多个el-select不能重复选择相同属性

一、场景 1.需求&#xff1a; 用户可自由选择需要修改的对象并同时修改多个属性&#xff0c;需要校验修改对象不能重复选择&#xff0c;但是可供修改属性是固定的 2.目标效果&#xff1a; 二、实现 1.主要代码&#xff1a; <template><el-selectv-model"se…

k8s pod基础 1

发布和yaml文件的初步了解。 pod&#xff1a;是k8s中最小的资源管理组件。 pod也是最小化运行容器化的应用的资源管理对象。 pod是一个抽象的概念&#xff0c;可以理解为一个或者多个容器化应用的集合。 在一个pod当中运行一个容器是最常用的方式。 在一个pod当中可以同时…

深度思考,AI项目的人工智能到底引领的是什么?

项目深度思考&#xff0c;人工智能到底引领的是什么&#xff1f; 人工智能引领技术之舞&#xff1a;项目深度思考项目背景&#xff1a;人工智能的魔法时代技术选择的深度思考&#xff1a;AI大决战团队协作的深度思考&#xff1a;AI联盟大会用户体验的深度思考&#xff1a;AI之光…

鸿蒙HarmonyOs:为什么不支持热更新?

学习了一段时间的鸿蒙开发&#xff0c;发现鸿蒙开发还是比较简单的&#xff0c;今天突然心血来潮&#xff0c;研究了一下鸿蒙热更新&#xff0c;最终得出的结论是鸿蒙暂时不支持热更新。 鸿蒙app开发主要是利用的ArkTs语言&#xff0c;ArkTs又是基于TypeScript语言的&#xff0…

2024年MySQL学习指南(二),探索MySQL数据库,掌握未来数据管理趋势

文章目录 前言4. DDL- 操作数据库4.1 查询4.2 创建数据库4.3 删除数据库4.4 使用数据库 5. DDL- 操作数据表5.1 数据类型5.2 查询表5.3 创建表5.4 删除表5.5 修改表 6. 实战案例详解 前言 接上一篇文章【2024年MySQL学习指南&#xff08;一&#xff09;】 4. DDL- 操作数据库 …