深入解读Python如何进行文件读写

open

Python提供了非常方便的文件读写功能,其中open是读写文件的第一步,通过open读写文件的方式和把大象装冰箱是一样的

f = open("test.txt",'w')    #第一步,把冰箱门(文件)打开
f.write("this is content")  #第二步,把大象(文件内容)装进去
f.close()                   #第三步,把冰箱门关上,否则大象可能会跑掉

open的定义方式为

file=open(path,mode='r',buffering=-1,encoding=None)

其中,

  • path为文件路径
  • mode为读取模式,默认为r,即只读模式。
  • buffering为缓冲区,由于内存的读写速度快于外设,所以大部分情况不用设,即不大于0。
  • encoding为编码方式
  • 最后,输出的file是一个文件对象。

其中,mode包括以下几种

r r+ w w+ a a+
b rb rb+ wb wb+ ab ab+

其中,b表示二进制,r表示读,w表示写,a表示追加。无论什么模式,有+则意味着可读可写。写入一般会覆盖原文件,追加则在原文件尾部开始写。如果文件不存在,w, w+, a, a+, wb会创建新文件。

文件对象

通过open创建的文件对象,除了用于关闭文件的close之外,有两组最常用的函数,即代表读写的readwrite,分别用于读写,其区别如下

read write 读写整个文件
read(size)可读取size大小的文件
readline 每次读一行
由于write直接输入字符串,故不必设置writeline
readlines writelines 前者按行读取文件,并存入一个字符串列表
writelines将一个字符串列表的形式写入文件

例如

>>> f = open('test.txt','w')
>>> f.writelines(['a','b','c\n','d'])
>>> f.close()
>>> f = open('test.txt','r')
>>> f.readlines()
['abc\n', 'd']      #在写lines的时候,并不会自动添加\n
>>> f.close()

根据我电脑的性能,读取500M的txt就要超过1s,读取2G的文件多半要报错。这个时候需要通过seek函数来指定偏移量,然后在偏移处的位置对文件进行读写操作。其输入为f.seek(offset,whence=0)

其中

  • offset为偏移量
  • whence为偏移方式,为0时表示绝对定位;为1时表示相对定位;为2表示从末尾定位。

seek的视角来看,open文件时,如果用了w,则代表seek(0),如果用了a,则代表seek(0,2)

通过tell可以返回当前偏移量,相当于seek的对偶函数。

在对文件操作结束后,需要使用f.close()将缓存中的字符串写入硬盘;如果害怕发生意外,可以用f.flush()强制写入。

此外,文件对象的成员变量如下

name mode encoding error closed buffer
文件名 读写模式 编码方式 错误模式 是否已经关闭 缓冲区

此外还有三个判定函数

readable() writable() seekable
是否可读 是否可写 可否指定偏移量

with … as表达式

在写入文件时,如果忘了close或者flush,那么可能还有一些数据留在内存中,从而导致我们得到的文件是残缺的。

with as表达式可以通过调用对象中的__enter__方法和__exit__方法,来更加智能地调用close,从而免除了忘写close的麻烦。其调用方法为

with open('text.txt','w') as f:
    f.write("12345")

查看file.py,其__exit__函数正是close:

def __enter__(self):
    return self

def __exit__(self, type, value, traceback):
    self.close()

底层实现:os.open

open是非常方便的函数,但开销也很大,毕竟直接返回了一个文件对象。相比之下,其底层实现os.open返回的是一个整型的文件ID,对于在速度上有要求的频繁的文件读写操作,可以考虑使用。

os中,打开一个文件的方法为

fd = os.open(path, flags, mode=511, dir_fd=None)

其中,

  • path为文件路径
  • flags为打开标志,例如os.O_RDONLY代表只读、os.O_WRONLY代表只写
  • mode表示文件权限,例如777代表任何人可读可写可执行;511代表文件创建者可读可执行,其他人只可读,这属于Linux的内容,日后可专门在Linux里说。
  • dir_fd表示相对路径的规则,为自定义函数,比较少用。
  • 最后,输出的fd是某个文件的标识。

其中,mode的取值可见于deepinwindows的手册,常用的标志如下,多个标志可通过|叠加,这一股浓郁的C风确认来自操作系统无疑了。

os.open open os.open open
os.O_RDONLY ‘r' os.O_WRONLY ‘w'
os.O_RDWR ‘r+' os.O_APPEND ‘a'
os.O_CREAT 创建并打开

其中相关的函数还有:

os.fdopen(fd, mode, bufsize) 通过fd创建一个文件对象,并返回这个文件对象
os.read(fd, n) 从fd 中读取最多 n 个字节并返回,如果fd对应文件已达到结尾, 则返回空串。
os.write(fd, str) str写入fd,返回实际写入的字符串长度
os.fsync(fd) 强制将fd所对应的文件写入硬盘
os.close(fd) 关闭fd
os.dup(fd) 复制fd
os.dup2(fd, fd2) 将fd1所对应的文件复制给fd2
os.fstat(fd) 返回fd的状态
os.ftruncate(fd, length) 裁剪fd, length不大于文件尺寸
os.isatty(fd) 如果fd已经打开,同时与tty(-like)设备相连,则返回True, 否则False。
os.lseek(fd, pos, how) 设置fd当前位置为pos, how为修改方式,等同于前文中的whence

到此这篇关于深入解读Python如何进行文件读写的文章就介绍到这了,更多相关Python 文件读写内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python利用文件读写编写一个博客

    代码展示 import random import json import time import os     def zhuce():     print("*********************正在注册*********************")     try:         users = readfile()     except:         fa = open(r'test.json', "w",encoding="utf-8&

  • Python读写Excel表格的方法

    本文实例为大家分享了Python读写Excel表格的具体代码,供大家参考,具体内容如下 python读取Excel表格: import xlrd def read_excel(): # 打开文件 wb = xlrd.open_workbook(r'test.xls') # 获取所有sheet的名字 print(wb.sheet_names()) # 获取第二个sheet的表名 sheet2 = wb.sheet_names()[1] print("sheet2 = {}".format

  • python实现简单文件读写函数

    python作为脚本性语言,加上它的简便易用性.会经常当作脚本用来处理一下数据和格式.其中处理文件就是频繁用处之一.简单编写几个常用的xls和txt读写函数,以后可以快速复用. 用到xlrd库函数需要预先install 命令:pip install xlrd 直接贴源码: #! /usr/bin/python # coding:utf-8 import json import xlrd import sys reload(sys) sys.setdefaultencoding('utf-8')

  • Python初学者必备的文件读写指南

    一.如何将列表数据写入文件 ⾸先,我们来看看下⾯这段代码,并思考:这段代码有没有问题,如果有问题的话,要怎么改? li = ['python',' is',' a',' cat'] with open('test.txt','w') as f: f.write(li) 现在公布答案,这段代码会报错: TypeError Traceback (most recent call last) <ipython-input-6-57e0c2f5a453> in <module>() 1 w

  • python文件处理--文件读写详解

    目录 1. 读取文件 2. 写入文件 总结 1. 读取文件 文件读取很简单,就三步. 第一:在Windows的记事本中直接输入"愿你出走半生归来仍是少年!" 第二:通过代码读取文件 步骤: 1.使用open()函数打开文件. myfile = open(r'test.txt','r') myfile是变量,存放读取的文件. 第一个r是固定符号(原生字符). 'test.txt'是需要读取文件的文件名,在这里, readfile.py文件与test.txt文件需要放在同一文件夹内. 最后

  • 深入解读Python如何进行文件读写

    open Python提供了非常方便的文件读写功能,其中open是读写文件的第一步,通过open读写文件的方式和把大象装冰箱是一样的 f = open("test.txt",'w') #第一步,把冰箱门(文件)打开 f.write("this is content") #第二步,把大象(文件内容)装进去 f.close() #第三步,把冰箱门关上,否则大象可能会跑掉 open的定义方式为 file=open(path,mode='r',buffering=-1,en

  • Python多线程同步---文件读写控制方法

    1.实现文件读写的文件ltz_schedule_times.py #! /usr/bin/env python #coding=utf-8 import os def ReadTimes(): res = [] if os.path.exists('schedule_times.txt'): fp = open('schedule_times.txt', 'r') else: os.system('touch schedule_times.txt') fp = open('schedule_ti

  • 对Python之gzip文件读写的方法详解

    gzip文件读写的时候需要用到Python的gzip模块. 具体使用如下: # -*- coding: utf-8 -*- import gzip # 写文件 f_out = gzip.open("xxx.gz", "wb") # 读文件 # f_in = gzip.open("xxx.gz", "rb") for line in open("yyy.txt", "rb"): f_out

  • Python内存映射文件读写方式

    我就废话不多说了,还是直接看代码吧! import os import time import mmap filename = 'test.txt' #如果不存在,创建. if not os.path.exists(filename): open(filename, 'w') print(os.path.isdir(filename)) if os.path.isfile(filename): print(time.ctime(os.path.getctime(filename))) fd =

  • python使用技巧-文件读写

    前言: 在Python中,要对一个文件进行操作,只需要使用内置的open函数打开文件即可.open函数接受文件名和打开模式作为参数,返回一个文件对象.工程师通过文件对象来操作文件,完成以后,调用文件对象的close方法关闭文件即可. 新建opentest.py: f = open('log.log') print(f.read()) f.close() 输出: 2022-02-17 13:41:34,796:INFO:info2022-02-17 13:41:34,797:WARNING:war

  • 给Python学习者的文件读写指南(含基础与进阶)

    对于初学者来说,一份详尽又清晰明白的指南很重要.今天,猫猫跟大家一起,好好学习Python文件读写的内容,这部分内容特别常用,掌握后对工作和实战都大有益处.学习是循序渐进的过程,欲速则不达.文章较长,建议大家收藏,以备复习查阅哦. 1.如何将列表数据写入文件? 2.如何从文件中读取内容? 3.多样需求的读写任务 4.从with语句到上下文管理器 如何将列表数据写入文件? 首先,我们来看看下面这段代码,并思考:这段代码有没有问题,如果有问题的话,要怎么改? li = ['python',' is'

  • 详细解读python操作json文件的详细

    目录 json支持的格式: 代码操作 1.json转化为python 2. python序列化为json 总结 json转化为python表示反序列化 python转化为json表示为序列化 json是python的内置模块,不需要安装 json支持的格式: Json Python 对象(object) 字典(dict) 数组(array) 列表(list) 字符串(string) 字符串(str) 整数(int) 整数(int) 实数(float) 实数(float) true True fa

  • 详解python中的异常和文件读写

    Python异常 1.python异常的完整语法 try: # 提示用户输入一个整数 num = int(input("输入一个整数:")) # 使用 8 除以用户输入的整数并且输出 result = 8 / num print(result) except ValueError: print("请输入正确的整数!") except Exception as result: print("未知错误:%s" % result) else: prin

  • python文件读写操作与linux shell变量命令交互执行的方法

    本文实例讲述了python文件读写操作与linux shell变量命令交互执行的方法.分享给大家供大家参考.具体如下: python对文件的读写还是挺方便的,与linux shell的交互变量需要转换一下才能用,这比较头疼. 代码如下: 复制代码 代码如下: #coding=utf-8 #!/usr/bin/python import os import time #python执行linux命令 os.system(':>./aa.py') #人机交互输入 S = raw_input("

随机推荐