Python文件操作常用的API(open函数使用)

2023-11-11

打开文件,获取文件对象

fp = open(file, mode, encoding)
# file:要操作的文件路径, 使用的时候注意目录的拼接
# mode: 打开方式
# encoding: 编码方式
  • 关于第一个参数file需要注意的是:
    文件的路径,使用的时候要注意文件目录的拼接,在项目里时常会有人忘记拼接路径而出错。

路径问题查阅: os.path

  • 关于第二个参数mode:
    在这里插入图片描述

  • 关于第三个参数encoding需要注意的是:
    这个指定用来指定编码方式,通常不指定,系统会自动识别。

    举例下面这个我曾经遇到的情况来说明问题:
    不同操作系统上,默认的编码是不一样的,这个需要注意,比如在windows操作系统上,默认新建的文件的编码格式是gbk的,linux上则是默认的unicode。
    写入文件的数据如果需要指定编码格式,比如我使用requests库爬取网页,将response的内容保存到文件中,写入文件时候会出错,而且response是一个HTML文件,保存之后用浏览器打开,也有可能出现了页面乱码的问题,那么这个时候就需要指定该参数。

import requests

response = requests.get('https://www.baidu.com')

with open('baidu.html', 'w+') as f:
    f.write(response.text)

运行文件会报错如下:
UnicodeEncodeError: 'gbk' codec can't encode character '\xe7' in position 318: illegal multibyte sequence

这就是写入的数据的编码格式与系统默认文件格式不同导致的,第一次进行代码修改,结果如下

import requests

response = requests.get('https://www.baidu.com')

with open('baidu.html', 'w+', encoding='utf-8') as f:
    f.write(response.text)

修改之后没有出现了错误,但是用浏览器打开保存的HTML文件,会发现页面乱码的问题,当然,这个乱码的根本原因就是字符集的问题(浏览器也有默认打开文件的编码方式,如果有乱码的问题,考虑以下这个问题,还有response返回的HTML文件的charset我们使用的百度的charset是UTF-8的,当然这个编码格式问题不是我们这篇文章主要研讨的),我们以open函数的使用来寻求以下两种解决方式:

import requests

response = requests.get('https://www.baidu.com')


with open('baidu.html', 'w+', encoding='utf-8') as f:
    # response.content是bytes类型的内容,对bytes数据进行编码
    f.write(response.content.decode('utf-8'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python文件操作常用的API(open函数使用) 的相关文章

  • 在 Python 中解析 TCL 列表

    我需要在双括号上拆分以空格分隔的 TCL 列表 例如 OUTPUT 172 25 50 10 01 01 Ethernet 172 25 50 10 01 02 Ethernet Traffic Item 1 172 25 50 10 01
  • Python - 比较同一字典中的值

    我有一本字典 d Trump MAGA FollowTheMoney Clinton dems Clinton Stein FollowTheMoney Atlanta 我想删除字符串列表中的重复字符串 该字符串是键的值 对于这个例子 期望
  • 从Django中具有外键关系的两个表中检索数据? [复制]

    这个问题在这里已经有答案了 This is my models py file from django db import models class Author models Model first name models CharFie
  • 为什么 web2py 在启动时崩溃?

    我正在尝试让 web2py 在 Ubuntu 机器上运行 所有文档似乎都表明要在 nix 系统上运行它 您需要下载源代码并执行以下操作 蟒蛇 web2py py 我抓住了source http www web2py com examples
  • PyQt 使用 ctrl+Enter 触发按钮

    我正在尝试在我的应用程序中触发 确定 按钮 我当前尝试的代码是这样的 self okPushButton setShortcut ctrl Enter 然而 它不起作用 这是有道理的 我尝试查找一些按键序列here http ftp ics
  • Python 内置的 super() 是否违反了 DRY?

    显然这是有原因的 但我没有足够的经验来认识到这一点 这是Python中给出的例子docs http docs python org 2 library functions html super class C B def method se
  • 如何将特定范围内的标量添加到 numpy 数组?

    有没有一种更简单 更节省内存的方法可以单独在 numpy 中执行以下操作 import numpy as np ar np array a l r ar c a a 0 l ar tolist a r 它可能看起来很原始 但它涉及获取给定数
  • 从 Powershell 脚本安装 Python

    当以管理员身份从 PowerShell 命令行运行以下命令时 可以在 Windows 11 上成功安装 Python c temp python 3 11 4 amd64 exe quiet InstallAllUsers 0 Instal
  • 未知错误:Chrome 无法启动:异常退出

    当我使用 chromedriver 对 Selenium 运行测试时 出现此错误 selenium common exceptions WebDriverException Message unknown error Chrome fail
  • 嵌套作用域和 Lambda

    def funct x 4 action lambda n x n return action x funct print x 2 prints 16 我不太明白为什么2会自动分配给n n是返回的匿名函数的参数funct 完全等价的定义fu
  • Django 视图中的“请求”是什么

    在 Django 第一个应用程序的 Django 教程中 我们有 from django http import HttpResponse def index request return HttpResponse Hello world
  • 尽管我已在 python ctypes 中设置了信号处理程序,但并未调用它

    我尝试过使用 sigaction 和 ctypes 设置信号处理程序 我知道它可以与python中的信号模块一起使用 但我想尝试学习 当我向该进程发送 SIGTERM 时 但它没有调用我设置的处理程序 只打印 终止 为什么它不调用处理程序
  • pandas - 包含时间序列数据的堆积条形图

    我正在尝试使用时间序列数据在 pandas 中创建堆积条形图 DATE TYPE VOL 0 2010 01 01 Heavy 932 612903 1 2010 01 01 Light 370 612903 2 2010 01 01 Me
  • 将 Matlab 的 datenum 格式转换为 Python

    我刚刚开始从 Matlab 迁移到 Python 2 7 在读取 mat 文件时遇到一些问题 时间信息以 Matlab 的日期数字格式存储 对于那些不熟悉它的人 日期序列号将日历日期表示为自固定基准日期以来已经过去的天数 在 MATLAB
  • 找到一个数字所属的一组范围

    我有一个 200k 行的数字范围列表 例如开始位置 停止位置 该列表包括除了非重叠的重叠之外的所有类型的重叠 列表看起来像这样 3 5 10 30 15 25 5 15 25 35 我需要找到给定数字所属的范围 并对 100k 个数字重复该
  • python 中的“槽包装器”是什么?

    object dict 和其他地方的隐藏方法设置为这样的
  • 如果 PyPy 快 6.3 倍,为什么我不应该使用 PyPy 而不是 CPython?

    我已经听到很多关于PyPy http en wikipedia org wiki PyPy项目 他们声称它比现有技术快 6 3 倍CPython http en wikipedia org wiki CPython口译员开启他们的网站 ht
  • 等待子进程使用 os.system

    我用了很多os system在 for 循环内调用创建后台进程 如何等待所有后台进程结束 os wait告诉我没有子进程 ps 我使用的是Solaris 这是我的代码 usr bin python import subprocess imp
  • 在virtualenv中下载sqlite3

    我正在尝试使用命令创建应用程序python3 manage py startapp webapp但我收到一条错误消息 django core exceptions ImproperlyConfigured 加载时出错 pysqlite2 或
  • 如何将Python3设置为Mac上的默认Python版本?

    有没有办法将 Python 3 8 3 设置为 macOS Catalina 版本 10 15 2 上的默认 Python 版本 我已经完成的步骤 看看它安装在哪里 ls l usr local bin python 我得到的输出是这样的

随机推荐

  • WSL结合Windows Terminal的优化

    windows下面使用Linux命令 对于如今的工作人员已经不再是遥不可及的梦想 这得益于WSL Windows subsystem for Linux 的出现 不仅如此 windows系统还推出了windows terminal 对于终端
  • Mysql 入门篇之二进制安装

    文章目录 Mysql 5 7 入门安装 卸载自带组件 下载二进制包 安装 配置 Mysql 8 0 入门安装 卸载自带组件 下载二进制包 安装 配置 Mysql 5 7 入门安装 环境说明 CentOS Linux release 7 6
  • C++STL之set/multiset容器

    概述 set multiset容器的特性 1 set multiset的特性是所有元素会根据元素的值自动进行排序 set是以RB tree 红黑树 属于平衡二叉树的一种 而平衡二叉树是属于二叉树的一种 为底层机制 其查找效率非常好 set容
  • c++循环、continue、排序、goto以及猜数字小游戏

    打印 include
  • 常用通信协议总结

    通信可以形象的比喻成两个人讲话 1 你说的别人得能听懂 双方约定信号的协议 2 你的语速别人得能接受 双方满足时序要求 3 串行通信 一个人说 一个人听 4 并行通信 xx个人说 xx个人听 一 UART协议 UART Universal
  • 关于Ubuntu14.04在VMware中分辨率的问题

    关于Ubuntu14 04在VMware中分辨率的问题 需要先安装VMware tool之后才能正确匹配显示分辨率 例如1920 1080
  • flutter 网络地址URL转file

    方法1 import dart io import package http http dart as http import package path path dart import package path provider path
  • 微信小程序上传图片报错:uploadFile:fail url not in domain list

    上传图片时 在微信开发工具中可以正常上传成功 手机上预览也可上传成功 小程序发布成功后 上传失败 提示 uploadFile fail url not in domain list 错误信息如下 解决方案 1 在微信管理公众平台 小程序 开
  • 数字图像处理 第五章图像复原与重建

    文章目录 数字图像处理 第五章 图像复原与重建 引言 5 1背景知识 5 2图像退化与复原 5 3噪声模型 高斯噪声 椒盐噪声 瑞丽噪声 伽马噪声 5 4只存在噪声的复原 空间滤波 均值滤波 统计排序滤波 自适应滤波 数字图像处理 第五章
  • java多线程总结:原理结合源码详细讲解 - 简单实用

    执行策略 线程执行的方式 串行执行 比如 医院给病人看病的时候 可以让所有的病人都拍成一个队形 让一个医生统一的看病 医生 线程 病人看病 任务 这种一个医生给一群站好队形的病人看病 映射到java就相当于 单线程串行执行任务 映射到我们j
  • 理解D3D—(2)最多混合几层texture

    理解D3D 2 最多混合几层texture 先提出问题 Q 要是模型有很多层贴图 再加上shadow map 还有ssao 岂不是会不够用了 A 参考资料 IDirect3DDevice9 SetTexture Assigns a text
  • Linux静态库与动态库

    文章目录 一 源代码的组织 二 静态库 三 动态库 四 静态库与动态库的优缺点 1 优点 2 缺点 五 动态库的优缺点 1 优点 2 缺点 六 编译的优先级 七 版权声明 一 源代码的组织 我们通常把公用的自定义函数和类从主程序中分离出来
  • mnt/hgfs 共享文件夹文件丢失不见

    Vmware centos mnt hgfs 共享文件夹文件丢失 我在强制虚拟机关机后 再次打开发现原先与windows共享的文件夹没有文件了 熟悉的同学都知道windows和Vmware如何共享文件夹 使用vmware tools 在li
  • 硅基生命之漫谈-1:天马行空

    1 身 生理 硬件 1 1 分解与组合 原子 分子 有机分子 基因 器官 组织 人体 1 2 五官 眼 摄像头 耳 拾音器 鼻 各种气体床传感器 口 发声器 舌 味道传感器 1 3 人体八大系统 运动系统 手 足 身体 运动 神经系统 眼
  • ChatGPT对教育发展方向的影响

    ChatGPT 对教育发展的影响主要体现在以下几个方面 智能化教育 通过 ChatGPT 这样的语言模型 可以提供智能的教育辅助 如自动纠错 智能问答等 提高教学效率和学习效果 在线教育 通过使用 ChatGPT 可以在线提供教育服务 消除
  • UVM环境(env)树形结构

    UVM验证环境的组成 sequencer 负责将数据转给 driver driver 负责数据的 发送 driver 有时钟 时序的概念 agent 其实只是简单的把 driver monitor 和 sequencer 封装在一起 age
  • 微信小程序配置不同页面title

    1 配置全局title 在app json中window配置navigationBarTitleText 2 配置不同页面title 在页面的json文件中单独配置navigationBarTitleText 注意 如果保存之后不刷新执行以
  • spring中的@Configuration配置类和@Component

    在Spring的开发工作中 基本都会使用配置注解 尤其以 Component及 Configuration为主 当然在Spring中还可以使用其他的注解来标注一个类为配置类 这是广义上的配置类概念 但是这里我们只讨论 Component和
  • Redis常用数据结构及应用场景

    1 概述 Redis 一个开源的基于键值对 Key Value NoSQL 数据库 使用 ANSIC 语言编写 支持网络 基于内存但支持持久化 性能优秀 并提供多种语言的 API 我们要首先理解一点 我们把 Redis 称为 KV 数据库
  • Python文件操作常用的API(open函数使用)

    打开文件 获取文件对象 fp open file mode encoding file 要操作的文件路径 使用的时候注意目录的拼接 mode 打开方式 encoding 编码方式 关于第一个参数file需要注意的是 文件的路径 使用的时候要