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

2024-01-04

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[Python进阶] Python处理txt文件:open 的相关文章

  • SQLAlchemy 通过关联对象声明式多对多自连接

    我有一个用户表和一个朋友表 它将用户映射到其他用户 因为每个用户可以有很多朋友 这个关系显然是对称的 如果用户A是用户B的朋友 那么用户B也是用户A的朋友 我只存储这个关系一次 除了两个用户 ID 之外 Friends 表还有其他字段 因此
  • 将 Matplotlib 误差线放置在不位于条形中心的位置

    我正在 Matplotlib 中生成带有错误栏的堆积条形图 不幸的是 某些层相对较小且数据多样 因此多个层的错误条可能重叠 从而使它们难以或无法读取 Example 有没有办法设置每个误差条的位置 即沿 x 轴移动它 以便重叠的线显示在彼此
  • 使 django 服务器可以在 LAN 中访问

    我已经安装了Django服务器 可以如下访问 http localhost 8000 get sms http 127 0 0 1 8000 get sms 假设我的IP是x x x x 当我这样做时 从同一网络下的另一台电脑 my ip
  • Python(Selenium):如何通过登录重定向/组织登录登录网站

    我不是专业程序员 所以请原谅任何愚蠢的错误 我正在做一些研究 我正在尝试使用 Selenium 登录数据库来搜索大约 1000 个术语 我有两个问题 1 重定向到组织登录页面后如何使用 Selenium 登录 2 如何检索数据库 在我解决
  • 如何使用Conda下载python包并随后离线安装?

    我知道通过 pip 我可以使用以下命令下载 Python 包 但 pip install 破坏了我的内部包依赖关系 当我做 pip download
  • 使用 on_bad_lines 将 pandas.read_csv 中的无效行写入文件

    我有一个 CSV 文件 我正在使用 Python 来解析该文件 我发现文件中的某些行具有不同的列数 001 Snow Jon 19801201 002 Crom Jake 19920103 003 Wise Frank 19880303 l
  • 测试 python Counter 是否包含在另一个 Counter 中

    如何测试是否是pythonCounter https docs python org 2 library collections html collections Counter is 包含在另一个中使用以下定义 柜台a包含在计数器中b当且
  • OpenCV 无法从 MacBook Pro iSight 捕获

    几天后 我无法再从 opencv 应用程序内部打开我的 iSight 相机 cap cv2 VideoCapture 0 返回 并且cap isOpened 回报true 然而 cap grab 刚刚返回false 有任何想法吗 示例代码
  • 在f字符串中转义字符[重复]

    这个问题在这里已经有答案了 我遇到了以下问题f string gt gt gt a hello how to print hello gt gt gt f a a gt gt gt f a File
  • Pandas:merge_asof() 对多行求和/不重复

    我正在处理两个数据集 每个数据集具有不同的关联日期 我想合并它们 但因为日期不完全匹配 我相信merge asof 是最好的方法 然而 有两件事发生merge asof 不理想的 数字重复 数字丢失 以下代码是一个示例 df a pd Da
  • Jupyter Notebook 内核一直很忙

    我已经安装了 anaconda 并且 python 在 Spyder IPython 等中工作正常 但是我无法运行 python 笔记本 内核被创建 它也连接 但它始终显示黑圈忙碌符号 防火墙或防病毒软件没有问题 我尝试过禁用两者 我也无法
  • 如何在seaborn displot中使用hist_kws

    我想在同一图中用不同的颜色绘制直方图和 kde 线 我想为直方图设置绿色 为 kde 线设置蓝色 我设法弄清楚使用 line kws 来更改 kde 线条颜色 但 hist kws 不适用于显示 我尝试过使用 histplot 但我无法为
  • 每个 X 具有多个 Y 值的 Python 散点图

    我正在尝试使用 Python 创建一个散点图 其中包含两个 X 类别 cat1 cat2 每个类别都有多个 Y 值 如果每个 X 值的 Y 值的数量相同 我可以使用以下代码使其工作 import numpy as np import mat
  • 对年龄列进行分组/分类

    我有一个数据框说df有一个柱子 Ages gt gt gt df Age 0 22 1 38 2 26 3 35 4 35 5 1 6 54 我想对这个年龄段进行分组并创建一个像这样的新专栏 If age gt 0 age lt 2 the
  • 为字典中的一个键附加多个值[重复]

    这个问题在这里已经有答案了 我是 python 新手 我有每年的年份和值列表 我想要做的是检查字典中是否已存在该年份 如果存在 则将该值附加到特定键的值列表中 例如 我有一个年份列表 并且每年都有一个值 2010 2 2009 4 1989
  • Conda SafetyError:文件大小不正确

    使用创建 Conda 环境时conda create n env name python 3 6 我收到以下警告 Preparing transaction done Verifying transaction SafetyError Th
  • 使用 Python 绘制 2D 核密度估计

    I would like to plot a 2D kernel density estimation I find the seaborn package very useful here However after searching
  • 如何计算 pandas 数据帧上的连续有序值

    我试图从给定的数据帧中获取连续 0 值的最大计数 其中包含来自 pandas 数据帧的 id date value 列 如下所示 id date value 354 2019 03 01 0 354 2019 03 02 0 354 201
  • 发送用户注册密码,django-allauth

    我在 django 应用程序上使用 django alluth 进行身份验证 注册 我需要创建一个自定义注册表单 其中只有一个字段 电子邮件 密码将在服务器上生成 这是我创建的表格 from django import forms from
  • Python 类继承 - 诡异的动作

    我观察到类继承有一个奇怪的效果 对于我正在处理的项目 我正在创建一个类来充当另一个模块的类的包装器 我正在使用第 3 方 aeidon 模块 用于操作字幕文件 但问题可能不太具体 以下是您通常如何使用该模块 project aeidon P

随机推荐

  • elementui loading自定义图标和字体样式

    需求 页面是用了很多个loading 需要其中有一个字体大些 具体到图标也一样的方法 换下类名就行 遇见的问题 改不好的话会影响其他的loading样式 一起改变了 效果展示 改之前 改之后 关键知识点 element的loading自带的
  • ASP.NET Core路由中间件[1]: 终结点与URL的映射

    一 路由注册 我们演示的这个ASP NET Core应用是一个简易版的天气预报站点 如果用户希望获取某个城市在未来 N 天之内的天气信息 他可以直接利用浏览器发送一个GET请求并将对应城市 采用电话区号表示 和天数设置在URL中 如下图所示
  • 电子相册制作模板免费使用要什么工具?分享从照片到视频

    不知道大家平时有没有拍照的爱好呢 我一个朋友就喜欢通过镜头来记录自己的生活 一年下来她的相册里满满当当都是她的生活碎片 而且她还说要把这些照片都发布到自己的社交平台上和大家分享 可问题是她拍的照片太多了 如果以图片的形式发布 那么要发很多条
  • 北京大学漏洞报送证书

    获取来源 edusrc 教育漏洞报告平台 url 教育漏洞报告平台 EDUSRC 兑换价格 30金币 获取条件 北京大学任意中危或以上级别漏洞
  • 【图像配准】

    非配对配准 Non rigid registration 和配对配准 Rigid registration 是医学图像配准中常用的两种方法 它们有着不同的含义和应用 非配对配准 Non rigid registration 非配对配准是指将
  • 10个Python中的数据类型技巧

    简介 如何在Python中操作数据类型 图片文本 Python数据类型 数据类型是任何编程语言的基石 Python也不例外 通过有效地理解和使用数据类型 可以编写出更高效 可读性更强和更易于维护的代码 以下是在Python中使用数据类型的1
  • 友思特分享 | CamSim相机模拟器:极大加速图像处理开发与验证过程

    来源 友思特 机器视觉与光电 友思特分享 CamSim相机模拟器 极大加速图像处理开发与验证过程 原文链接 https mp weixin qq com s IED7Y6R8WE4HmnTiRY8lvg 欢迎关注虹科 为您提供最新资讯 随着
  • Qt界面篇:Qt停靠控件QDockWidget、树控件QTreeWidget及属性控件QtTreePropertyBrowser的使用

    1 功能介绍 本篇主要使用Qt停靠控件QDockWidget 树控件QTreeWidget及Qt属性控件QtTreePropertyBrowser来搭建一个简单实用的主界面布局 效果如下所示 2 控件使用详解 2 1 停靠控件QDockWi
  • SDH、MSTP、OTN和PTN的关系

    在开始之前 先要解释一下 TDM 的概念 TDM 就是时分复用 就是将一个标准时长 1秒 分成若干段小的时间段 8000 每一个小时间段 1 8000 125us 传输一路信号 SDH系统的电路调度均以TDM为基础 所以看到很多人说SDH业
  • 对技术行业的深度思考

    技术行业是当今世界最为热门和发展迅猛的领域之一 无论是互联网 人工智能还是区块链 技术的快速发展正在改变着我们的生活和社会 然而 我们是否真正思考过技术在我们生活中的影响和意义 本文将对技术行业展开深度思考 探讨其带来的优势与挑战 以及如何
  • Win7系统提示找不到KBDUSL.DLL文件的解决办法

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库 这时你可以下载这个KBDUSL
  • Win7系统提示找不到KBDUS.DLL文件的解决办法

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库 这时你可以下载这个KBDUS D
  • Windows指纹识别不可用情况解决方案

    网上杂七杂八的一乱堆 真正解决的没几个 以下实测有用 修好的样子 1 按win x打开设备管理器 有一个 设备管理器 点进去 找到上面的生物识别设备 2 禁用启动 带有PurePrint TM 的Synaptics FS7605触摸式指纹传
  • 串口通讯第一次发送数据多了一字节

    先初始化IO再初始化串口 导致第一次发送时 多出一个字节数据 优化方案 先初始化串口再初始化IO 即可正常通讯
  • Scrum认证A-CSM官方认证班高级ScrumMaster - A-CSM认证班

    课程简介 高级ScrumMaster Advanced Certified ScrumMaster A CSM 认证课程是国际Scrum联盟推出的进阶级Scrum认证课程 是Scrum Master通往专业级敏捷教练必经的学习路径 在Scr
  • ACL 2024投递指南

    诸神缄默不语 个人CSDN博文目录 显然写这篇博客是因为我要投ACL了 TL DR ACL 2024是ARR提交制 workshop归workshop 最晚提交时间是2024年2月15号 在此之前可以随时撤回 4月15号出结果 4月20号确
  • 迅为RK3568开发板-实时系统烧写-烧写固件(下)

    3 烧写系统 拷贝完镜像 开始烧写镜像 点击 RKdevTool exe 如下图所示 烧写工具打开如下图所示 选择 升级固件 选项卡 然后点击升级固件选项卡下的 固件 选项 在弹出的固件窗口中选择 放在烧写器 image 文件夹下的 upd
  • 海报制作软件有哪些?看完这篇你就知道了

    在如今快节奏的生活中 许多人都深陷于工作的繁忙中 特别是那些从事创意设计的人 他们时常面对老板一些不可思议的要求 海报设计师更是如此 老板总是在最短的时间内要求完成海报设计 老板的创意常常超乎寻常 让设计师感到摸不着头脑 不知如何下手 使用
  • 扬帆证券:申购新股怎样才能中签?要注意什么?

    申购新股是一种很受欢迎的理财方式 如果能够中签就有或许获得不错的收益 那么申购新股怎样才能中签 要注意什么 扬帆配资 也为大家准备了相关内容 以供参考 申购新股怎样才能中签 要想申购新股首要要有申购资历 也便是要有足够的市值配售额度 市值配
  • [Python进阶] Python处理txt文件:open

    7 1 Python处理txt文件 open 在Python中 通过open函数可以打开一个文件 创建一个file对象 然后对该对象进行读写 函数语法 open name mode buffering 参数说明 name 文件名 mode