首页 > 编程语言 >Python中文件操作的详细使用:open()、os.open()和with open()

Python中文件操作的详细使用:open()、os.open()和with open()

时间:2023-08-08 18:32:31浏览次数:41  
标签:文件 打开 函数 Python open txt os

Python中文件操作的详细使用:open()、os.open()和with open()_打开文件

前言

在编程语言中,文件读写是最常见的IO操作,Python内置了读写文件的函数,其中包括open()函数、os.open()函数以及with open()语句。本文将详细介绍这三种方法的使用方式、区别和最佳实践。

open()

open()函数是Python内置的用于打开文件的函数,它接受一个文件路径和打开模式作为参数,并返回一个文件对象。下面是一个示例:

file = open("example.txt", "r")

上述代码中,我们使用open()函数打开了一个名为"example.txt"的文件,并以只读模式("r")打开。常用的打开模式如下:

模式

可做操作

若文件不存在

是否覆盖

r

只读

error

-

r+

读写

error

T

w

只写

create

T

w+

读写

create

T

a

只写

createF,尾部追加写


a+

读写

create

F,尾部追加写

wb

只写二进制字符串,写入bytes

create

T

rb

只读二进制字符串,返回bytes

error

-

使用示例

  1. 打开文件

要以读文件的模式打开一个文件对象,使用Python内置的 open() 函数,传入文件名和标示符:

f=open('test.txt', 'r')

当文件存在时,脚本会正常运行,当文件不存在或者路径错误时,会抛出IOError错误,如下:

Traceback (most recent call last):
  File "C:/Users/xxxx/PycharmProjects/xxxx/read_demo.py", line xxxx, in <module>
    f=open('text.txt', 'r')
FileNotFoundError: [Errno 2] No such file or directory: 'text.txt'
  1. 读取文件

如果文件打开成功,接下来,调用 read() 方法可以一次读取文件的全部内容,Python把内容读到内存,用一个str对象表示:

f=open('test.txt', 'r')
print(f.read())

注:如果文件本身编码为gbk,读取时将会出现报错,如下:

UnicodeDecodeError: 'gbk' codec can't decode byte 0xbd in position 30: illegal multibyte sequence

我们需要将文件编码格式改为utf-8,增加一个encoding='utf-8'的参数,如下:

f=open('test.txt', 'r', encoding='utf-8')
print(f.read())
----------------
输出结果如下:
2014年巴西世界杯,德国7:0巴西
  1. 关闭文件

使用open()函数打开文件后必须要关闭,否则将会一直占用系统资源,并且同时打开的文件数量是有限的,需要我们及时关闭,代码如下:

f.close()

os.open()

os.open()函数是Python的os模块提供的函数,用于以低级别的方式打开文件。它接受文件路径和打开模式作为参数,并返回一个文件描述符。下面是一个语法示例:

os.open(file, flags[, mode])

参数说明:

  • file:要打开的文件
  • flags:该参数可以是以下选项,多个使用 "|" 隔开,只列常用的:
  • os.O_RDONLY: 以只读的方式打开
  • os.O_WRONLY: 以只写的方式打开
  • os.O_RDWR : 以读写的方式打开
  • os.O_APPEND: 以追加的方式打开
  • os.O_CREAT: 创建并打开一个新文件

使用示例:

import os

f = os.open('os_test.txt', os.O_RDWR|os.O_CREAT)
str = '拜仁永远是第一!'
s = bytes(str, encoding='utf-8')
os.write(f, s)
os.close(f)

注:如果直接写入字符串会报错,报错为a bytes-like object is required, not 'str',我们需要提前将字符串转为bytes才可以成功写入文件。

open()类似,os.open()也需要close()掉,释放系统资源。

with open()

with open()语句是一种更加简洁和安全的文件操作方式。它会在文件使用完毕后自动关闭文件,无需显式调用close()函数。下面是语法示例:

with open(file, 'mode') as f:

with open()语句的各种模式与open()语句一样,这里不做赘述。

使用示例

with open('test.txt', 'r', encoding='utf-8')as f:
    print(f.read())
#################
2014年巴西世界杯,德国7:0巴西

-------------------------------
# 同时打开多个文件
with open('test.txt', 'r', encoding='utf-8')as f1, open('os_test.txt', 'r', encoding='utf-8')as f2:
    print(f1.read())
    print(f2.read())
################
2014年巴西世界杯,德国7:0巴西
拜仁永远是第一!

注:为了避免文件打开时出现UnicodeDecodeError建议在打开文件时,加上encoding='utf-8'参数。

异同点与最优选择

open()函数与os.open()函数不会自动关闭文件,需要调用close方法,这一点是with open()的大优势,不会造成资源泄漏的问题。

  • 使用open()函数和with open()语句是进行文件操作的常见做法,尤其是对于简单的文件读写任务。
  • 需要以低级别方式操作文件时,才使用os.open()函数,它更适用于特定的场景,如需要在文件中定位和读取特定位置的数据。
  • 在使用with open()语句时,可以在语句块中进行其他的文件操作,例如写入内容或定位文件指针位置。

综合来说,执行文件操作时,最优选择毫无疑问是with open(),建议执行文件操作时使用'with open()'语句!!!

总结

综上所述,我们详细介绍了Python中文件操作的三种方式:open()函数、os.open()函数和with open()语句。根据不同方式的优缺点,我们还是推荐使用最优秀的with open()语句来执行文件的操作。

标签:文件,打开,函数,Python,open,txt,os
From: https://blog.51cto.com/u_15640304/7011271

相关文章

  • 工业4.0 RAMI体系之运动控制规范(PLCopen SoftMotion) @Like
    工业4.0 RAMI体系之运动控制规范(PLCopenSoftMotion)@Like 目录1.运动控制1.1.自动化控制1.2.PLCopen运动控制规范1.3.PLC功能块1.3.1.功能块特性1.3.2.单轴功能块Single-Axis1.3.3.多轴功能块Multi-Axis 运动控制1.1. 自动化控制PLC、Robot、CNC机械电......
  • Python_GUI(pySide)开发指南(@Like)
    Python_GUI(pySide)开发指南(@Like) 目录一、PythonGUI简介二、PySide6工具安装1.安装VSCode:https://code.visualstudio.com/2.安装Python:https://www.python.org/downloads/3.安装PyCharm:https://www.jetbrains.com/pycharm/4.更新pip: 命令python.exe-mpip......
  • Python | isinstance函数
    isinstance函数isinstance的意思是“判断类型”;isinstance()是一个内置函数,用于判断一个对象是否是一个已知的类型,类似type()。isinstance()与type()区别type()不会认为子类是一种父类类型,不考虑继承关系。isinstance()会认为子类是一种父类类型,考虑继承关系。如果要判......
  • Azure OpenAI
    AzureOpenAI服务-文档、快速入门、API参考-AzureAIservices|MicrosoftLearn ......
  • LeetCode 16. 3Sum Closest 双指针+排序
    Givenanintegerarraynumsoflengthnandanintegertarget,findthreeintegersinnumssuchthatthesumisclosesttotarget.Returnthesumofthethreeintegers.Youmayassumethateachinputwouldhaveexactlyonesolution.Solution先将原数组排序,然......
  • 我的python路-python基础
    以前用的比较多的语言是java,但是自从从事测试行业以来,发现“通用的语言”竟然是python!呜呼~各种评论都说python学习很简单,but一点也不简单好吗,本次分享就是一个记录,给一些小白同学做参考,大神请帮忙指正错误~~本期学习笔记:1、python语言使用变量直接赋值即可,不用声明类型,但是使......
  • ghost-on-docker、nginx-proxy-manager install
    #ghost安装dockerrun-d--nameblog-ghost-eNODE_ENV=development-edatabase__connection__filename='/var/lib/ghost/content/data/gggdb.db'-p8080:2368-v/path/to/ghost/blog:/var/lib/ghost/contentghost#nginx-proxy-manager中文安装docker-compose.yml......
  • python 标准库Enum模块
    1.Enum模块简介枚举(enumeration)在许多编程语言中常被表示为一种基础的数据结构使用,枚举帮助组织一系列密切相关的成员到同一个群组机制下,一般各种离散的属性都可以用枚举的数据结构定义,比如颜色、季节、国家、时间单位等enum规定了一个有限集合的属性,限定只能使用集合内的值,明......
  • Unittest + python + Selenium + HTMLTestRunner 自动化测试
      1.测试框架参数说明 base/base_page.py对selenium方法进行二次封装 config/setting.py基础信息 pageobject/把每个页面的页面元素和操作,放在一个py文件中。测试用例只需引用对应页面的操作 report存放测试报告的 runcase/start_ca......
  • ETHERCAT转CANOPEN协议网关canopen和can区别
    1.产品功能JM-ECT-COP是自主研发的一款ETHERCAT从站功能的通讯网关。该产品主要功能是将ETHERCAT网络和CANOPEN网络连接起来。本网关连接到ETHERCAT总线中做为从站使用,连接到CANOPEN总线中做为主站使用。3.技术参数ETHERCAT技术参数网关做为ETHERCAT网络的从站......