[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 的相关文章

  • 将 saxon 与 python 结合使用

    我需要使用 python 处理 XSLT 目前我正在使用仅支持 XSLT 1 的 lxml 现在我需要处理 XSLT 2 有没有办法将 saxon XSLT 处理器与 python 一起使用 有两种可能的方法 设置一个 HTTP 服务 接受
  • Python(Selenium):如何通过登录重定向/组织登录登录网站

    我不是专业程序员 所以请原谅任何愚蠢的错误 我正在做一些研究 我正在尝试使用 Selenium 登录数据库来搜索大约 1000 个术语 我有两个问题 1 重定向到组织登录页面后如何使用 Selenium 登录 2 如何检索数据库 在我解决
  • Django:按钮链接

    我是一名 Django 新手用户 尝试创建一个按钮 单击该按钮会链接到我网站中的另一个页面 我尝试了一些不同的例子 但似乎没有一个对我有用 举个例子 为什么这不起作用
  • 如何使用Conda下载python包并随后离线安装?

    我知道通过 pip 我可以使用以下命令下载 Python 包 但 pip install 破坏了我的内部包依赖关系 当我做 pip download
  • 如何替换 pandas 数据框列中的重音符号

    我有一个数据框dataSwiss其中包含瑞士城市的信息 我想用普通字母替换带有重音符号的字母 这就是我正在做的 dataSwiss Municipality dataSwiss Municipality str encode utf 8 d
  • 如何从网页中嵌入的 Tableau 图表中抓取工具提示值

    我试图弄清楚是否有一种方法以及如何使用 python 从网页中的 Tableau 嵌入图形中抓取工具提示值 以下是当用户将鼠标悬停在条形上时带有工具提示的图表示例 我从要从中抓取的原始网页中获取了此网址 https covid19 colo
  • 是否可以忽略一行的pyright检查?

    我需要忽略一行的pyright 检查 有什么特别的评论吗 def create slog group SLogGroup data Optional dict None SLog insert one SLog group group da
  • 基于代理的模拟:性能问题:Python vs NetLogo & Repast

    我正在 Python 3 中复制一小段 Sugarscape 代理模拟模型 我发现我的代码的性能比 NetLogo 慢约 3 倍 这可能是我的代码的问题 还是Python的固有限制 显然 这只是代码的一个片段 但 Python 却花费了三分
  • 使用 Tkinter 显示 numpy 数组中的图像

    我对 Python 缺乏经验 第一次使用 Tkinter 制作一个 UI 显示我的数字分类程序与 mnist 数据集的结果 当图像来自 numpy 数组而不是我的 PC 上的文件路径时 我有一个关于在 Tkinter 中显示图像的问题 我为
  • Python 函数可以从作用域之外赋予新属性吗?

    我不知道你可以这样做 def tom print tom s locals locals def dick z print z name z name z guest Harry print z guest z guest print di
  • 如何在ipywidget按钮中显示全文?

    我正在创建一个ipywidget带有一些文本的按钮 但按钮中未显示全文 我使用的代码如下 import ipywidgets as widgets from IPython display import display button wid
  • Jupyter Notebook 内核一直很忙

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

    我使用下面的代码将图像分割成网格的 20 个相等的部分 import cv2 im cv2 imread apple jpg im cv2 resize im 1000 500 imgwidth im shape 0 imgheight i
  • 对年龄列进行分组/分类

    我有一个数据框说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 中追加到 JSON 文件?

    我有一个 JSON 文件 其中包含 67790 1 kwh 319 4 现在我创建一个字典a dict我需要将其附加到 JSON 文件中 我尝试了这段代码 with open DATA FILENAME a as f json obj js
  • Conda SafetyError:文件大小不正确

    使用创建 Conda 环境时conda create n env name python 3 6 我收到以下警告 Preparing transaction done Verifying transaction SafetyError Th
  • 使用其构造函数初始化 OrderedDict 以便保留初始数据的顺序的正确方法?

    初始化有序字典 OD 以使其保留初始数据的顺序的正确方法是什么 from collections import OrderedDict Obviously wrong because regular dict loses order d O
  • 在 Qt 中自动调整标签文本大小 - 奇怪的行为

    在 Qt 中 我有一个复合小部件 它由排列在 QBoxLayouts 内的多个 QLabels 组成 当小部件调整大小时 我希望标签文本缩放以填充标签区域 并且我已经在 resizeEvent 中实现了文本大小的调整 这可行 但似乎发生了某
  • 从列表指向字典变量

    假设你有一个清单 a 3 4 1 我想用这些信息来指向字典 b 3 4 1 现在 我需要的是一个常规 看到该值后 在 b 的位置内读写一个值 我不喜欢复制变量 我想直接改变变量b的内容 假设b是一个嵌套字典 你可以这样做 reduce di
  • 如何将输入读取为数字?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 Why are x and y下面的代码中使用字符串而不是整数 注意 在Python 2

随机推荐

  • 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