广告
返回顶部
首页 > 资讯 > 后端开发 > Python >4.python之文件处理
  • 364
分享到

4.python之文件处理

文件python 2023-01-31 05:01:10 364人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

在python中如果想对硬盘中的一个文件进行操作大概可以分为三步,它的流程如下:使用open函数打开一个文件句柄,并且赋值给一个变量。通过相应的文件句柄对指定的文件进行操作。操作完成后关闭文件,文件关闭后,会将文件内容写入到磁盘中。open

python中如果想对硬盘中的一个文件进行操作大概可以分为三步,它的流程如下:

  1. 使用open函数打开一个文件句柄,并且赋值给一个变量。

  2. 通过相应的文件句柄对指定的文件进行操作。

  3. 操作完成后关闭文件,文件关闭后,会将文件内容写入到磁盘中。

open函数的使用方法如下。

open(‘文件路径’,mode=‘打开文件的模式‘,encoding='文件编码方式')

  1. 文件路径:这个文件路径可以是绝对路径,也可以是相对路径,在Python中相对路径只需要写文件名就可以了,如果python程序和需要大开的文件如果在一个目录的话,直接使用相对路径就可以了。

    注意!如果要使用open函数,文件路径是必要参数,不可以不传!

  2. 打开文件的模式:open函数里面有一个非必要形参,就是mode,它用来定义文件的打开模式,如果不指定文件打开模式,默认情况下会使用r(只读)模式打开文件。

    python中所提供的常用文件打开方式如下:

    'r' 以只读模式打开文件,使用r(只读模式)打开文件,文件只能读,不能做写操作。(文件不存在,则抛出异常)




    'w'以只写模式打开文件,使用w(只写模式)打开文件,文件只能写,不能读取,不过有一点需要特别注意!!!!!一个原本就有内容的文件,一旦使用w打开,那么这个文件的内容会被清空!!(至于原因,本文后面会补充。)(如果不想文件原来的内容被清空!!那么千万不要使用w模式!!!!!!!)(文件不存在时,会创建一个文件,如果文件存在,则会先清空文件内容)




    'a' 追加模式,也是一种只写模式,用于在问价的尾部追加内容,所写入的内容都会追加到文件的末尾处



       'b' 二进制模式,使用二进制的方式来打开文件,注意!这个‘b’(二进制模式)是要与(r,w,a)三种模式组合使用的。(跨平台跨操作系统建议使用此模式)


    'r+' 可读可写(在这种模式下,虽然可读可写,但是写的时候一定要注意,seek指针还在文件的头部,如果没有调整seek指针的位置直接开始写入,会直接开始覆盖前面写的内容(从文件头部开始),所以说,在使用r+模式的时候,一定要注意seek指针的位置,在文件的什么地方!!否则会覆盖原有内容。)


    'w+' 可写可读 (这个模式一般情况下不要用,也会直接清空文件)

    'a+' 末尾追加,可写可读


一.对文件对象进行操作的常用方法

读文件:

readable()用于判断文件是否可读,如果可读返回True,否则返回False。

readline() 一次读取文件的一行,返回字符串类型。

read()一次读取文件所有的内容,返回一整个字符串。

readlines()读取文件的所有内容,并把文件的每一行内容添加到一个列表里面,文件的每一行内容都将作为列表中的一个元素。


写文件:

writable():判断文件是否可写,如果可写,返回True,否则返回False。

write():在文件中写入内容,只有当文件处于可写的模式,才可以使用此方法,具体在文件的什么位置写,则取决于文件的打开模式(是r+还是a+或者是w+)还有就是取决于当前的seek指针所指向文件的什么位置。(在补充一点,使用write方法向文件内部写内容,是没有换行符的,需要手动添加个换行符,不然所有的内容都会粘到一起。)

例:f1.write('hello!\n') #\n就是换行符。


writelines():和wirte类似,都是向文件内部写入内容,和write不同的是,writelines是使用列表的形式来对文件内部写入内容,使用writelines方法,python会将列表循环,列表中的每个元素都会写入到文件中。

注意!使用writelines对文件内部写内容时,也是不带换行符的,如果给每个元素的尾部都加个换行符,那么列表中的每一个元素都是文件中的一行。


注意!!在文件中写入的内容只能是字符串,不可以是其他类型!!否则会抛出异常,就算要写入数字,那么这个数字也一定要转换成字符串类型!!!


其他操作:

close()关闭文件,当文件使用读完或者写完后一定要使用close关闭文件!(使用with语法除外,因为使用with关键字打开文件,对文件的操作结束后,会自动关闭文件)。

读完文件后不关闭,程序会一直占用系统资源。

写完文件后不关闭,会导致内存中的内容不会及时的同步到硬盘中,若想把内容彻底写到硬盘,要不然就使用close关掉文件,要不然,就使用flush方法强制把内存中的数据刷到硬盘上。


flush()将内存中没有写到硬盘上的数据,强刷到硬盘中。


encoding:显示文件打开的编码(在python2中没有这个方法,在python3中可以使用。)


tell():可以获取当前seek指针的位置。


seek(指针位置 ,模式)以字节为单位,移动seek指针,在文件中的位置。

在pyrhon中对seek指针的操作有三种模式,下面对这三种模式进行一个详细的介绍:

file.seek(n,0)#n代表了指针的位置,后面的数字0代表的是模式的序号。


file.seek(n,0):(模式0)模式0代表了,绝对位置,n为几,就会把指针移动到从文件开头开始算数的第几个字节。(在使用seek时,如果不指定模式,那么默认的模式就是0。)

比如说file.seek(3,0) 将指针移动到从文件的开头(第0个字节)开始数,三个字节的位置。

#没使用指针之前

f1 = open('seasons.lrc',mode='r')

print f1.readline()

>>>浜崎あゆみ - Seasons


#下面是使用0模式,将指针移动到文件的第3个字节,将指针移动到第3个字节以后,在去读文件,就会从指针的后面开始读文件。

f1 = open('seasons.txt',mode='r')

print f1.tell() #显示一下seek指针当前的位置

>>>0 #(位置是0,代表指针在文件的开头)

f1.seek(3,0)    #(将指针移动到第三个字节处,使用0模式,绝对位置)

print f1.tell()   #再次查看指针位置,可以验证指针的位置确实被移动到了第三个字节处。

>>>3

print f1.readline()  #从当前指针的位置后面读取一行。

>>>崎あゆみ - Seasons


这时可能有人要问了,读文件是从指针的后面开始读的没错,但是明明把指针移动到了三个字节之后啊,为什么才跳过了一个字符?

这就需要了解什么是字符和字节了,一定要清楚这个概念!!在utf-8的字符编码中,一个汉字会占用三个字节,原来第一行的内容是“浜崎あゆみ - Seasons”,因为一个汉字占了三个字节,所以指针被向后移动了三个字节,正好是一个汉字的位置,指针被移动到了“浜”后面,读文件的话,就从这个字后面开始读, 所以显示的就是“崎あゆみ - Seasons”。(一个日文字符在utf-8字符编码中也占三个字节。)


后面在举个例子,这个例子可以明白“绝对位置”的意思。

f1 = open('seasons.lrc',mode='r')

print f1.tell()  #打开文件后,指针默认的位置是0。

>>>0

f1.seek(3,0)  #将指移动到文件中3个字节的位置。

print f1.tell()

>>>3

f1.seek(3,0)

print f1.tell()

>>>3






file.seek(n,1): (模式1)模式1,相对位置,n代表了指针在当前位置向后移动几个字节。

如果觉得我说的不太容易懂的话,估计看下后面的例子,就懂了。


f1 = open('seasons.lrc',mode='r')

print f1.tell()   #打开文件后,指针默认的位置是0。

>>>0

f1.seek(3,1)  #将指针向后移动3个字节的位置。

print f1.tell()

>>>3     #指针移动到了第3个字节的位置。

f1.seek(3,1)  #这里是重点了,将指针在向后移动3个字节(在这个地方就可以比较出模式1和模式0的区别了。)

print f1.tell()

>>>6   #指针的位置在第6个字节上,这也就说明了,1模式每次移动,并不是从文件的开头开始算起,而是根据指针上次所在的位置开始向后移动。(这也就是“相对位置”的意思。)


如果还看不懂,那就看下面的补充。

最后在补充一下:

f1.seek(3,0) 是指,将指针移动到文件第3个字节的位置。(绝对位置)

f1.seek(3,1) 是指,将指针从当前位置向后移动3个字节的位置。(相对位置)



file.seek(-n,2): 以绝对位置,从文件最末尾开始,向文件的开头移动。(在使用2模式时,需要注意,指针移动的位置只能是负数,因为是从最末尾开始向前移动!)

下面是例子:

#打开一个文件,使用read方法从头读到文件的尾部,当文件被读完,指针自然就回移到文件的末尾。

f1 = open('seasons.txt',mode='r')

print f1.tell()

>>>0

f1.read()

print f1.tell()

>>>756


现在通过上面的方法已经知道,文件的最末尾是文件的第几个字节。

下面来测试下seek方法的2模式的功能是否如之前所说,从文件最末尾开始,向文件的开头移动。

f1 = open('seasons.txt',mode='r')

print f1.tell()

>>>0

f1.seek(-1,2)  #使用seek的2模式,将指针从文件的最末尾向前移动1个字节

print f1.tell()

>>>755

#文件的最末尾是756,向前移动了一个字节就是755,得到了我们想要得到的效果。


其实seek方法的2模式还是比较有用的,下面就细说下seek方法的2模式。

在获取文件的倒数第1行到第N行,就可以使用seek方法的2模式。


这时可能会有人问,取出文件的最后一行,岂不是很简单的操作,只要使用readlines方法把文件都读出来,然后取最后一个元素,就可以取到最后一行了,这种方法岂不是更简单?

像这样。

f1 = open('seasons.txt',mode='r')

print f1.readlines()[-1]

>>>そして何を?つけるだろう

文件的最后一行确实被取出来了,但是,有没有想过,这种使用readlines读取文件的本质,是把文件的每一行全部读到内存中,如果这个文件特别大,比如说10个G,100G,大到当前的内存放不下,如果是这种情况,这种方法就不适用了。


下面这种方法,对于大文件就特别适用了。

f1 = open('seasons.txt',mode='r')

for i in f1:      #直接for循环文件句柄,并不会一次性把文件都读到内存,而是读一行从文件中取一行。

    line_bytes = -36

    while True:

        f1.seek(line_bytes,2)

        data = f1.readlines()

        if len(data) > 1:

            print data[-1]

            break

        else:

            line_bytes * 2



--结束END--

本文标题: 4.python之文件处理

本文链接: https://www.lsjlt.com/news/189148.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 4.python之文件处理
    在python中如果想对硬盘中的一个文件进行操作大概可以分为三步,它的流程如下:使用open函数打开一个文件句柄,并且赋值给一个变量。通过相应的文件句柄对指定的文件进行操作。操作完成后关闭文件,文件关闭后,会将文件内容写入到磁盘中。open...
    99+
    2023-01-31
    文件 python
  • python文件处理笔记之文本文件
    目录1. 建立文件1.1 文本文件代码实现1.2 代码编写分析2. 基本的读写文件2.1 用文件对象write(s)方法写内容2.2 用文件对象read()方法读取内容2.3 连续用...
    99+
    2022-11-12
  • python之excel文件(.xls文件)处理方式
    目录python excel文件(.xls文件)如何处理xlrdxlwtxlutilspython处理excel文件问题openpyxl 及 excel 文件结构工作表处理行列处理单...
    99+
    2023-05-19
    python excel文件 excel文件处理 .xls文件处理方式
  • Python 文件处理之open()函数
    目录1.文件处理2.Python 文件写入3.创建新文件4.删除文件实例删除文件夹前言: 文件处理是任何 Web 应用程序的重要组成部分。 Python 有几个用于创建、读取、更新和...
    99+
    2022-11-13
  • python处理excel文件之xlsxwriter 模块
    目录模块基本使用写入更多样式数据其余样式扩展xlsxwriter 中的 write 方法xlsxwriter 关闭文件其它需要了解的方法xlsxwriter 模块的优缺点优点缺点模块...
    99+
    2022-11-11
  • python基础之文件处理知识总结
    目录一、open()方法二、read()方法三、readlines()方法四、seek()方法五、tell()函数  一、open()方法 python open...
    99+
    2022-11-12
  • assign之python文本处理
    需求: code: import os import time import numpy as np def to_log_txt(filename): if not os.path.exists('Out_file'):...
    99+
    2023-01-31
    文本 assign python
  • Python文件处理
    本文给大家介绍Python文件处理相关知识,具体内容如下所示: 1.文件的常见操作 文件是日常编程中常用的操作,通常用于存储数据或应用系统的参数。python提供了os、os.path、shutil等模块...
    99+
    2022-06-04
    文件 Python
  • python 文件处理
    python经常会操作文件,在磁盘上读写文件的功能都是由操作系统提供的, 现代操作系统不允许普通的程序直接操作磁盘,所以, 读写文件就是 请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中...
    99+
    2023-01-31
    文件 python
  • python基础之文件操作和异常处理
    目录一、文件和异常1.1从文件中读取数据1.2open()1.3关键字with1.4read()二、逐行读取三、创建一个包含文件各行内容的列表3.1readlines()四、查找字符...
    99+
    2022-11-12
  • python高手之路python处理excel文件(方法汇总)
    用python来自动生成excel数据文件。python处理excel文件主要是第三方模块库xlrd、xlwt、xluntils和pyExcelerator,除此之外,python处理excel还可以用wi...
    99+
    2022-06-04
    之路 高手 文件
  • lazarus - Free Pascal 之 文件处理
    Lazarus是一个基于Free Pascal编译器的开发环境,用于创建跨平台应用程序。在Lazarus中,可以很方便地进行文件处理...
    99+
    2023-10-12
    lazarus
  • python处理excel文件
    python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是写excel的库。可从这里下载https://pypi.python.org/pypi。下面分别记录python读和写excel.python...
    99+
    2023-01-31
    文件 python excel
  • Python中 文件处理
    在文件处理当中,只有read默认是以字符为单位,其他方法均已字节为单位. def open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None,...
    99+
    2023-01-31
    文件 Python
  • python bin文件处理
      1. 基础知识掌握  bin文件: open函数创建file对象  打开文件的不同模式:例子:open(“file.txt”,‘r’)  模式  描述  r  以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。  rb  ...
    99+
    2023-01-31
    文件 python bin
  • python 处理excel文件
    有两种办法1.使用 Xlrd/xlwt 操作 Excelhttp://liluo.org/blog/2011/01/python-using-xlrd-xlwt-operate-excel/ Xlrd/xlwt库的功能有限,比如有的exce...
    99+
    2023-01-31
    文件 python excel
  • Python处理XML文件
    目录 🌲 前言🌲 准备🌲 xml.dom对象1. Document2. Node3. NodeList4. Element5. Attr &...
    99+
    2023-09-10
    xml python
  • 详解Python自动化之文件自动化处理
    一、生成随机的测验试卷文件 假如你是一位地理老师, 班上有 35 名学生, 你希望进行美国各州首府的一个小测验。不妙的是,班里有几个坏蛋, 你无法确信学生不会作弊。你希望随机调整问...
    99+
    2022-11-12
  • 1-4 多文档界面处理(3)
    5. 通过类的属性进行数据传值     此次案例我们改变本节案例(1)数据传值的方法,通过建立类的属性将数据传递过去。   u 实验步骤(1):     为传值目标窗口Form3定义相关属性信息如下:...
    99+
    2023-01-31
    界面 文档
  • python文件处理详解
    目录文件操作1.txt文件打开文件2.数据维度3.Excel文件总结文件操作 此为本人学习python过程中的笔记,将持续更新,欢迎提问指正。 1.txt文件 1.文本文件 tx...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作