一、基本文件操作
在使用Python内置的文件对象时,首先需要通过内置open()方法创建一个文件对象,然后通过该对象提供的一些方法进行一些基本文件操作。
1.创建和打开文件
在Python中,想要操作文件,需要先创建或者先打开指定文件,并且创建文件对象。我们一般使用open()方法来实现。基本语法格式如下:
file=open(filename[,mode[,buffering]])
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
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:
| 函数 | 说明 | 
| getcwd() | 返回当前的工作目录 | 
| listdir(path) | 返回指定路径下的文件和目录信息 | 
| mkdir(path) | 删除目录 | 
| chdir(path) | 把path设置为当前工作目录 | 
| 函数 | 说明 | 
| adspath(path) | 用于获取文件或者目录的绝对路径 | 
| isdir(path) | 用于判断是否为有效路径 | 
| join(path,name) | 将目录与目录或者文件名拼接起来 | 
| splitext() | 分离文件名和扩展名 | 
| basename(path) | 从一个目录中提取文件名 | 
2.路径
②相对路径
③绝对路径
os.path.abspath(path):
os.path.exists(path)
返回值:如果给定的路径存在,则返回True,否则返回False
os模块中的os.path.exists()方法用于检验文件是否存在。
当出现文件夹名称和文件名称重复时,使用上述函数检验会产生错误,这个时候,可以使用另一种方法来检查文件是否存在。【假设文件名称都为test-data】
import os
os.path.isflie("test-data")
os.mkdir(path,mode=o0777)
基本语法格式如下:
os.makedirs(name,mode=o0777)
os.rmdir(path)
os.walk(top[,topdown][,onerror][,followlinks])
三、高级文件操作
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)
os.rename(src.dst)
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操作系统下返回的是文件创建的时间) |