【Python】读写文件

一、基本文件操作

在使用Python内置的文件对象时,首先需要通过内置open()方法创建一个文件对象,然后通过该对象提供的一些方法进行一些基本文件操作。

1.创建和打开文件

在Python中,想要操作文件,需要先创建或者先打开指定文件,并且创建文件对象。我们一般使用open()方法来实现。基本语法格式如下:

file=open(filename[,mode[,buffering]])

其中,file是被创建的对象;filename是要创建或者打开的文件名称,需要使用单引号或者双引号括起来。如果要打开的文件和当前文件在同一个目录下,那么直接写文件名即可,否则需要指定完整的路径。例如:要打开当前路径下名称为status.txt的文件,可以使用“status.txt”。

mode为可选参数,用于指定文件的打开模式,其参数值如下表所示。默认的打开模式为只读(r)。buffering为可选参数,用于指定读写文件的缓冲模式,值为0表示不缓存,值为1表示缓存,如果值大于1,则表示缓冲区的大小,默认为缓存模式。

mode常见的参数值以及其说明【一部分】

说明注意
r以只读方式打开文件。文件的指针会放在文件的开头。文件必须存在
w打开一个文件只用于写入。如果该文件已存在则打开文件,并且从开头开始编辑,即原始内容会被删除。如果该文件不存在,创建新的文件。文件存在,则将其覆盖,否则创建新文件。
a打开一个文件用于追加。如果该文件已经存在,文件的指针将会放在文件的结尾。也就是说,新的内容会被写入到已有的内容之后。如果该文件不存在,创建新的文件写入。

2.关闭文件

打开文件后,需要及时关闭,以免对文件造成不必要的破坏。关闭文件可以使用文件对象的close()方法实现。基本语法格式如下:

file.close()

其中,file为打开的文件对象。

分析如下代码

import os
f = open("my_file.txt",'w')
#...
os.remove("my_file.txt)

上述代码中引用了os模块,调用了该模块中的remove()函数,该函数的功能是删除指定的文件。但是如果运行次程序,Python解释器会报异常。这是因为使用了open()方法打开了文件但是没有及时关闭,直接导致后面的remove()函数运行出现错误。

正确的代码应该如下所示:

import os
f = open("my_file.txt",'w')
f.close()
#...
os.remove("my_file.txt)

3.打开文件时使用with语句

打开文件后,应该及时关闭,则可能会带来其他问题。另外,如果在打开文件时抛出了异常,那么就会导致该文件不能技术关闭。为了避免此类问题的产生,我们可以使用with语句,从而实现在处理文件时,无论是否抛出异常,都能保证with语句执行完毕后关闭已经打开的文件。基本语法格式如下:

with expression as target:
    with-body

其中,expression用于指定一个表达式,这里可以使打开的文件的open()方法;target用于指定一个变量,并且将expression的结果保存到该变量中;with-body用于指定with语句体,其中可以执行with语句后相关的一些操作语句。如果不想执行任何语句,可以直接用pass语句代替。

4.写入文件的内容

C语言中文网
http://c.biancheng.net

在Python中除了可以读取文件内容之外,还可以向文件中写入内容,写入内容的类型也是有选择的。Python中提供了write()方法,可以向文件中写入内容。write()方法的基本语法格式如下:

file.write(string)

其中,file为打开的文件对象;string为要写入的字符串。

创建一个a.txt文件,该文件的内容如下:

C语言中文网

http://c.biancheng.net

然后,在和a.txt文件同级目录下创建一个Python文件,编写如下代码:

f = open("a.txt".'w')
f.write("写入一行新数据")
f.close()

前面已经讲过,如果打开文件模式中包含w(写入),那么向文件中再次写入内容时,会先清空原文件中的内容,然后再写入新的内容。因此,运行上面的程序,再次打开a.txt文件,只会看到新写入的内容。如下图:

如果打开文件模式中包含a(追加),则不会清空原有的内容,而是将新写入的内容添加到原内容后面。

Python中的文件对象,不仅提供了write()方法,还提供了writelines()方法,可以将字符串列表写入文件中。

【注意】:写入函数只有write()方法和writelines()方法,没有wriyeline()的方法。

5.读取文件

在Python中打开文件后,除了可以向其写入或者追加内容后,还可以读取文件中的内容。读取文件内容主要分为以下几种情况。

①读取指定字符

使用Python提供的read()方法读取指定个数的字符,语法格式如下:

file.read([size])

size为可选参数,用于指定要读取的字符个数,如果省略则一次性读取全部内容。

使用read()方法读取文件时,是从文件的开始进行读取的,如果想要读取中间某个片段的内容,可以先使用文件对象的seek()方法将文件的指针移到指定的位置,然后再使用read()方法进行读取内容。seek()方法的语法格式如下:

seek(offset,whence=0)

offset是偏移量,也就是代表需要移动偏移的字节数;whence为给offset参数一个定义,表示无论从哪个位置开始偏移,0代表从文件开头算起,1代表是从当前位置开始算起。2表示从文件末尾开始算起。当有换行时,会被换行截断。

②读取一行

文件对象提供了readline()方法用于每次读取一行数据。readline()方法的语法格式如下:

file.readline()

③读取全部行

读取全部行,采用的是文件对象的readlines()方法,语法格式如下:

file.readlines()

二、目录操作

1.os和os.path模块

导入os模块可以使用以下语句:

import os

导入os模块后,可以使用该模块的通用变量获取与系统有关的信息。

下面列举几个常用的变量:

(1)name:用于获取操作系统类型

在IDLE编辑器中输入os.name:

(2)linnesep:用于获取当前操作系统上的换行符

在IDLE编辑器内输入os.linesep:

(3)sep:用于获取当前操作系统所使用的路径分隔符

在IDLE编辑器中输入os.sep:

os模块提供的与目录有关的函数

函数说明
getcwd()返回当前的工作目录
listdir(path)返回指定路径下的文件和目录信息
mkdir(path)删除目录
chdir(path)把path设置为当前工作目录

os.path模块提供的与目录有关的函数

函数说明

adspath(path)

用于获取文件或者目录的绝对路径
isdir(path)用于判断是否为有效路径
join(path,name)将目录与目录或者文件名拼接起来
splitext()分离文件名和扩展名
basename(path)从一个目录中提取文件名

2.路径

用于定位一个文件或者目录的字符串被称为一个路径。在程序开发时,通常会涉及两种路径,一种是相对路径,另一种是绝对路径。了解什么是绝对路径和相对路径之前要先了解什么是工作目录

①当前工作目录

每个运行在计算机上的程序,都有一个“当前工作目录”。所有没有从根文件夹开始的文件名或者路径,都假定在当前工作目录下。

②相对路径

相对路径依赖于当前工作目录,如果在当前工作目录下有一个名称为message.txt的文件,那么在打开这个文件时,就可以直接写上文件名,这时采用的就是相对路径。

③绝对路径

绝对路径是指在使用文件时指定文件的实际路径。它不依赖于当前工作目录。在Python中,可以通过os.path了、模块提供的abspath()函数获取一个文件的绝对路径。基本语法格式如下:

os.path.abspath(path):

3.判断目录是否存在

在Python中有时候需要判断给定的目录是否存在,这是可以使用os.path模块提供的exists()函数实现。exists()函数基本语法格式如下:

os.path.exists(path)

其中,path为要判断的目录,可以采用绝对路径,也可以采用相对路径。

返回值:如果给定的路径存在,则返回True,否则返回False

os模块中的os.path.exists()方法用于检验文件是否存在。

当出现文件夹名称和文件名称重复时,使用上述函数检验会产生错误,这个时候,可以使用另一种方法来检查文件是否存在。【假设文件名称都为test-data】

import os
os.path.isflie("test-data")

4.创建目录

在Python中,os模块提供了两个创建目录的函数,一个用于创建一级目录,另一个用于创建多级目录。

①创建一级目录

创建一级目录是指一次只能创建一级目录。在Python中,可以使用os模块提供的mkdir()函数实现。通过该函数只能创建指定路径的最后一级目录。基本语法格式如下:

os.mkdir(path,mode=o0777)

其中,path用于指定要创建的目录,可以使用绝对路径也可以使用相对路径;mode用于指定数值模式,默认值为0777,该参数在非UNIX系统上无效或被忽略。

②创建多级目录

基本语法格式如下:

os.makedirs(name,mode=o0777)

5.删除目录

删除目录可以使用os模块提供的rmdir()函数来实现。通过rmdir()函数删除目录时只有当要删除的目录为空时才起作用。基本语法格式如下:

os.rmdir(path)

6.遍历目录

所谓遍历,是指沿着某条搜索路线,依次对树(或者图)中的每个节点均做一次访问。在Python中,遍历的意思就是对指定目录下的全部目录(包括子目录)及文件运行一遍。os模块中的walk()函数可以用于实现遍历目录的功能,基本语法格式如下:

os.walk(top[,topdown][,onerror][,followlinks])

三、高级文件操作

Python内置的os模块除了可以对目录进行操作,还可以对文件进行一些高级操作

os模块的函数以及其说明

函数说明
chmod(path.mode)修改path指定文件的访问权限
remove(path)删除path指定的文件路径
rename(src.dst)将文件或者目录src重命名为dst
stat(path)返回path指定文件的信息
startfile(path[,operation])使用关联的应用程序打开path指定的文件

 

1.删除文件

如上表所示,可以使用内置的os模块中的删除文件函数remove(),基本语法格式如下:

os.remove(path)

2.重命名文件和目录

Python中的os模块提供了rename()函数,可以用来重命名文件和目录,如果指定的路径是文件,则重命名文件,如果指定的路径是目录,则重命名目录。基本语法格式如下:

os.rename(src.dst)

在使用rename()函数重命名目录时,只能修改最后一级目录,否则抛出异常。

3.获取文件基本信息

在计算机上创建文件后,该文件本身就会包含一些信息。例如,文件的最后一次访问时间、最后一次修改时间、文件大小的基本信息等等。通过os模块到的stat()函数可以获取到文件的这些基本信息。stat()函数的基本语法格式如下:

os.stat(path)

其中,path为获取文件基本信息的文件路径,可以是相对路径也可以是绝对路径。stat()函数的返回值是一个对象,该对象包含的属性如下表所示。通过访问这些属性可以获取文件的基本信息。

stat函数的属性

属性说明
st_mode保护模式
st_into索引号

st_nlink

硬链接号(被连接数目)
st_size文件大小,单位为字节
st_dev设备名
st_uid用户ID
st_gid组ID
st_atime最后一次访问的时间
st_mtime最后一次修改的时间
st_ctime最后一次状态变化的时间(系统不同返回的结果也不同,如在Windows操作系统下返回的是文件创建的时间)

  • 34
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值