人工智能之Python13 文件IO

在你编写代码的时候,操作系统为了更快的做出响应,把所有当前的数据都放在内存中,因为内存和cpu数据传输的速度要比在硬盘和cpu之间传输的速度快很多,但不足时一旦机器断点,所有的数据就会丢失,所以此时需要文件存储

文件

打开文件

Python使用open()方法来打开并返回文件对象:

open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)
  1. file: 传入的文件名,如果只有文件名,不带路径的话,那么Python会在当前文件夹中去找到该文件并打开
  2. mode: 指定文件打开模式
打开模式 执行操作
r 以只读方式打开文件(默认)
w 以写入的方式打开文件
x 如果文件已存在,是用这种方式打开会出现异常
a 以写入模式打开文件,如果文件已存在,则在文件默认追加写入
b 以二进制模式打开文件
t 以文本模式打开
+ 可读写模式
U 通用换行符支持

使用open()方法成功打开一个文件之后就得到一个文件对象,拿到这个对象就可以读取或者修改这个文件

open("__init__.py")

操作文件

打开文件并取得文件对象之后,就可以利用文件对象的一些方法对文件进行读取或者修改等操作

文件对象的方法 执行操作
close() 关闭文件
read(size=-1) 从文件读取size个字符,当未指定size或给定负值的时候,
读取剩余的所有字符串然后作为字符串返回
readline 从文件中读取一整行字符串
write(str) 将字符串str写入文件
writelines(seq) 向文件写入字符串序列seq,seq应该是一个返回字符串的可迭代对象
seek(offset,from) 在文件中移动文件指针,从from
(0代表文件起始位置,1代表当前位置,2代表文件末尾)偏移offset个字节
tell() 返回当前在文件中的位置

文件的操作不做细分处理,有上面的api足够使用,遇到问题请自行查找官方api接口使用手册

关闭文件

close()方法用于关闭文件。

Python拥有垃圾回收机制,会在文件对象的引用计数降至零的时候自动关闭文件,所以在python变成里,如果忘记关闭文件并不会造成内存泄漏,但还是尽量在完成写入之后关闭文件

文件系统

Python对于文件系统的访问,是通过OS(Operate System-操作系统)来实现的。目前市面上的操作系统主要有Windows、Mac OS、Unix、Linux等。

这些系统对于文件系统的访问原理是不一样的,因此你可能就要针对不同的系统来考虑使用哪些文件系统模块,这就导致程序运行环境发生变化,就要去修改大量的代码去解决。所以Python提供OS模块来解决这种情景,开发者可以不需要关心什么
操作系统下使用什么模块,OS会帮助我们选择合适的模块

函数名称 使用方法
getcwd() 返回当前工作目录
chdir(path) 改变工作目录
listdir(path=’.’) 列举制定目录中的文件名(‘.’:表示当前目录,’..’:表示上一级目录)
mkdir(path) 创建单层目录,如果目录已存在则抛出异常
mkdirs(path) 递归创建多层目录,如果该目录已存在则抛出异常
remove(path) 删除文件
rmdir(path) 删除单层目录,如果该目录非空,则抛出异常
removedirs(path) 递归删除目录,从子目录到父目录逐层尝试删除,遇到目录非空则抛出异常
rename(old,new) 将文件old重命名未new
system(command) 运行系统的shell命令
os.curdir 当前目录(”.”)
os.pardir 上一级目录
os.sep 输出操作系统指定的路径分隔符(windows为’\’,Linux为’/’)
os.linesep 当前系统使用的行终止符(Window下为’\r\n’,Linux下为’\n’)
os.name 当前使用的操作系统(posix、nt、mac等等)

不多做介绍,重点介绍几个特别的方法

system

几乎每个操作系统都会提供一些小工具,system()函数用于使用这些小工具

import os
os.system('calc') # 获取系统自带的计算器

walk(top)

walk是一个很有用的函数,它的作用是遍历top参数指定目录下的所有子目录,并将结果返回一个三元组(路径,[包含目录],[包含文件])

import os
# 输出当前文件所在路径的上一级目录所包含的文件夹和文件
def os_walk():
    for i in os.walk(os.pardir) :
        print(i)
os_walk()

os.path模块

另一个强大的模块是os.path模块,它可以完成一些针对路径名的操作。

函数名 使用方法
basename(path) 去掉目录路径,单独返回文件名
dirname 去掉文件名,单独返回目录路径
join(path[,path2[,path3]]) 将path、path2、path3各部分组合成一个路径名
split(path) 分割文件名与路径,返回(f_path,f_name)元组
splitext(path) 分离文件名与扩展名,返回(f_name,f_extension)元组
getsize(file) 返回指定文件的尺寸,单位是字节
getatime(file) 返回指定文件最近的访问时间(浮点型秒数,可用time模块的gmtime()或者localtime()函数换算)
getctime(file) 返回指定文件的创建时间
getmtime(file) 返回指定文件最新的修改时间
exists(path) 判断指定路径或文件是否存在
isabs(path) 判断指定路径是否为绝对路径
isdir(path) 判断指定路径是否是文件夹
isfile(path) 判断指定路径是否是文件
islink(path) 判断指定路径是否存在是一个符号链接
ismount(path) 判断指定路径是否存在且是否是一个挂载点
samefile(path1,path2) 判断path1和path2两个路径是否指向同一个文件

pickle

之前的文件保存一直操作的是字符串,读写很简单。但是当我们操作更复杂一点的数据对象:列表,字典,类的实例等时普通的文本操作就会变得不知所措。
如果将其转化成字符串再保存进文件,可当读取的时候也是字符串,不是list,字典或者类的实例,因此,Python提供了一个标准模块,使用这个模块就可以很容易的把这些
列表,字典等复杂数据类型写进文件。这个模块就是pickle(泡菜)

import pickle
import os
## 写入my_list.pkl文件
def test_pickle():
    list01 = [1, 2, 'test', '我爱你']
    pickle_file = open(os.curdir + "my_list.pkl", "wb")
    pickle.dump(list01, pickle_file)
    pickle_file.close()

test_pickle()

执行完之后会在当前路径生成my_list.pkl文件

import pickle
import os
## 读取
def test_pickle02():
    pickle_file = open(os.curdir + "my_list.pkl", "rb")
    my_list = pickle.load(pickle_file)
    print(my_list)

test_pickle02()
## 输出是

[1, 2, 'test', '我爱你']

执行完之后会在当前路径生成my_list.pkl文件

猜你喜欢

转载自blog.csdn.net/u012806787/article/details/79317493