Python深度学习:逻辑、算法与编程实战
上QQ阅读APP看书,第一时间看更新

1.5 Python操作文件

使用Python读写文件非常方便,通过open()函数打开一个文件,获取文件句柄,然后即可通过句柄进行各种操作。

file对象可以使用open()函数来创建,下面列出了file对象常用的函数。

(1)file.close():关闭文件,关闭后文件不能再进行读写操作。

(2)file.flush():刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件,而不是被动地等待输出缓冲区写入。

(3)file.fileno():返回一个整型的文件描述符(file descriptor FD整型),可以用在如os模块的read方法等一些底层操作上。

(4)file.isatty():如果文件连接到一个终端设备,则返回True,否则返回False。

(5)file.next():返回文件下一行。

(6)file.read([size]):从文件读取指定的字节数,如果未给定或为负,则读取所有。

(7)file.readline([size]):读取整行,包括"\n" 字符。

(8)file.readlines([sizeint]):读取所有行并返回列表,若给定sizeint>0,返回总和大约为sizeint字节的行,实际读取值可能比sizeint大,因为需要填充缓冲区。

(9)file.seek(offset[, whence]):设置文件当前位置。

(10)file.tell():返回文件当前位置。

(11)file.truncate([size]):从文件的首行首字符开始截断,截断文件为size个字符,无size表示从当前位置截断;截断之后,后面的所有字符被删除,其中Windows系统下的换行代表2个字符大小。

(12)file.write(str):将字符串写入文件,没有返回值。

(13)file.writelines(sequence):向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。

1.5.1 操作文本文件

文本文件的读取步骤为打开、读取、关闭。例如,下面代码可完成逐行读取文件并且显示出来的操作。

下面的代码可完成将字符串写入文件的操作。

1.5.2 操作目录

Python操作目录的函数说明如下。

(1)创建目录:os.mkdir(path)。

(2)复制文件:shutil.copyfile("oldfilename","newfilename"),其中oldfilename和newfilename都只能是文件。

shutil.copy("directory","newfile"),其中directory只能是文件夹,newfile可以是文件,也可以是目录。

(3)复制文件夹:shutil.copytree("olddir","newdir"),其中olddir和newdir都必须是目录,且newdir不存在。

(4)重命名文件(目录):os.rename("oldname","newname")。

(5)移动文件(目录):shutil.move("old","new")。

(6)删除文件:os.remove("f")。

(7)删除目录:os.rmdir("diractory"),该函数只能删除空目录。

(8)删除目录:shutil.rmtree("dir")该函数可以删除空目录、有内容的目录。

(9)转换目录:os.chdir("path")。

(10)获取当前工作目录:os.getcwd()。

(11)返回指定目录下的所有文件和目录名:os.listdir()。

在下面的示例中,将实现递归遍历指定目录下所有文件的功能。

1.5.3 操作Excel文件

Python操作Excel文件常使用xlrd和xlwt这两个库,其中xlrd用于读excel,xlwt用于写excel,xlrd和xlwt库不是Python自带的,需要自行安装。PyCharm安装xlwt库如图1-32所示。

图1-32 安装xlwt库

1.xlrd读取excel文件

下面以实例形式展示xlrd读取excel文件方法,代码如下。

2.xlwt写excel文件

xlwt写excel文件示例如下。

1.5.4 操作CSV文件

CSV(Comma-Separated Values)文件是一种常用的数据格式文件,可以用Excel打开查看,也可以用其他编辑器打开。与Excel文件相比,CSV文件的特征如下。

(1)值没有类型,所有值都是字符串。

(2)不能指定字体颜色等样式。

(3)不能指定单元格的宽高,以及合并单元格。

(4)没有多个工作表。

(5)不能嵌入图像图表。

在CSV文件中,以逗号作为分隔符,分隔两个单元格。例如“a,,c”表示单元格a和单元格c之间有个空白的单元格,依此类推。

不是每个逗号都表示单元格之间的分界,所以即使CSV是纯文本文件,也坚持使用专门的模块进行处理。Python内置了csv模块。下面先看一个简单的实例。

1.写CSV文件

可以使用CSV类的writer写CSV文件,可以一次写入一行,也可以一次写入多行,代码如下。

2.读CSV文件

可以使用CSV类的reader读CSV文件,可以选择全部读出或分行读出,代码如下。