Task09:文件与文件系统

基本文件操作

  1. 打开文件使用open(file, mode=‘r’, buffering=None, encoding=None, errors=None, newline=None, closefd=True),其中:file: 必需,文件路径(相对或者绝对路径)。mode: 可选,文件打开模式。buffering: 设置缓冲。encoding: 一般使用utf8。errors: 报错级别。newline: 区分换行符
    参数mode可以有一下几种设置:
    Task09:文件与文件系统_第1张图片
  2. fileObject.close() 用于关闭一个已打开的文件。关闭后的文件不能再进行读写操作, 否则会触发ValueError错误。
  3. fileObject.read([size]) 用于从文件读取指定的字符数,如果未给定或为负则读取所有。
  4. fileObject.readline()读取整行,包括 “\n” 字符。
  5. fileObject.readlines()用于读取所有行(直到结束符 EOF)并返回列表,该列表可以由 Python 的 for… in … 结构进行处理。
  6. fileObject.tell()返回文件的当前位置,即文件指针当前位置。
  7. fileObject.seek(offset[, whence])用于移动文件读取指针到指定位置。
    offset:开始的偏移量,也就是代表需要移动偏移的字节数,如果是负数表示从倒数第几位开始。
    whence:可选,默认值为 0。给 offset 定义一个参数,表示要从哪个位置开始偏移;0 代表从文件开头开始算起,1 代表从当前位置开始算起,2 代表从文件末尾算起。
  8. fileObject.write(str)用于向文件中写入指定字符串,返回的是写入的字符长度。
    如果文件打开模式带b,那写入文件内容时,str(参数)要用encode方法转为bytes形式,否则报错:TypeError: a bytes-like object is required, not ‘str’。
  9. fileObject.writelines(sequence)向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符\n。
  10. 打开文件时一般使用with open() as f 确保文件对象在使用完之后一定会正确的执行它的清理方法。

OS模块中文件操作

  1. OS(Operation System)模块不关心什么操作系统下使用什么模块,会自动选择正确的模块并调用。
  2. os.getcwd()用于返回当前工作目录。
  3. os.chdir(path)用于改变当前工作目录到指定的路径。
  4. os.listdir(path=’.’)返回path指定的文件夹包含的文件或文件夹的名字的列表。
  5. os.mkdir(path)创建单层目录,如果该目录已存在抛出异常。
  6. os.makedirs(path)用于递归创建多层目录,如果该目录已存在抛出异常。
  7. os.remove(path)用于删除指定路径的文件。如果指定的路径是一个目录,将抛出 OSError。
  8. os.rmdir(path)用于删除单层目录。仅当这文件夹是空的才可以, 否则, 抛出 OSError。
  9. os.removedirs(path)递归删除目录,从子目录到父目录逐层尝试删除,遇到目录非空则抛出异常。
  10. os.rename(src, dst)方法用于命名文件或目录,从 src 到 dst,如果 dst 是一个存在的目录, 将抛出 OSError。
  11. os.system(command)运行系统的shell命令(将字符串转化成命令)
  12. os.curdir指代当前目录(.)
  13. os.pardir指代上一级目录(…)
  14. os.sep输出操作系统特定的路径分隔符(win下为\,Linux下为/)
  15. os.linesep当前平台使用的行终止符(win下为\r\n,Linux下为\n)
  16. os.name指代当前使用的操作系统(包括:‘mac’,‘nt’)
  17. os.path.basename(path)去掉目录路径,单独返回文件名
  18. os.path.dirname(path)去掉文件名,单独返回目录路径
  19. os.path.join(path1[, path2[, …]])将 path1,path2 各部分组合成一个路径名
  20. os.path.split(path)分割文件名与路径,返回(f_path,f_name)元组。如果完全使用目录,它会将最后一个目录作为文件名分离,且不会判断文件或者目录是否存在。
  21. os.path.splitext(path)分离文件名与扩展名,返回(f_path,f_name)元组。
import os

# 返回文件名
print(os.path.basename(r'C:\test\lsgo.txt'))  # lsgo.txt
# 返回目录路径
print(os.path.dirname(r'C:\test\lsgo.txt'))  # C:\test
# 将目录和文件名合成一个路径
print(os.path.join('C:\\', 'test', 'lsgo.txt'))  # C:\test\lsgo.txt
# 分割文件名与路径
print(os.path.split(r'C:\test\lsgo.txt'))  # ('C:\\test', 'lsgo.txt')
# 分离文件名与扩展名
print(os.path.splitext(r'C:\test\lsgo.txt'))  # ('C:\\test\\lsgo', '.txt')
  1. os.path.exists(path)判断指定路径(目录或文件)是否存在
  2. os.path.isabs(path)判断指定路径是否为绝对路径
  3. os.path.isdir(path)判断指定路径是否存在且是一个目录
  4. os.path.isfile(path)判断指定路径是否存在且是一个文件
  5. os.path.islink(path)判断指定路径是否存在且是一个符号链接
  6. os.path.ismount(path)判断指定路径是否存在且是一个悬挂点
  7. os.path.samefile(path1,path2)判断path1和path2两个路径是否指向同一个文件

数据的序列化与反序列化

  1. Python 的 pickle 模块实现了基本的数据序列和反序列化。
    序列化操作将程序中运行的对象信息保存到文件中去,永久存储。反序列化操作从文件中创建上一次程序保存的对象。
  2. pickle.dump(obj, file, [,protocol]) 将obj对象序列化存入已经打开的file中。
    obj:想要序列化的obj对象。
    file:文件名称。
    protocol:序列化使用的协议。如果该项省略,则默认为0。如果为负值或HIGHEST_PROTOCOL,则使用最高的协议版本。
  3. pickle.load(file) 将file中的对象序列化读出。
import pickle

dataList = [[1, 1, 'yes'],
            [1, 1, 'yes'],
            [1, 0, 'no'],
            [0, 1, 'no'],
            [0, 1, 'no']]
dataDic = {0: [1, 2, 3, 4],
           1: ('a', 'b'),
           2: {'c': 'yes', 'd': 'no'}}

# 使用dump()将数据序列化到文件中
fw = open(r'.\dataFile.pkl', 'wb')

# Pickle the list using the highest protocol available.
pickle.dump(dataList, fw, -1)

# Pickle dictionary using protocol 0.
pickle.dump(dataDic, fw)
fw.close()

# 使用load()将数据从文件中序列化读出
fr = open('dataFile.pkl', 'rb')
data1 = pickle.load(fr)
print(data1)
data2 = pickle.load(fr)
print(data2)
fr.close()

# [[1, 1, 'yes'], [1, 1, 'yes'], [1, 0, 'no'], [0, 1, 'no'], [0, 1, 'no']]
# {0: [1, 2, 3, 4], 1: ('a', 'b'), 2: {'c': 'yes', 'd': 'no'}}

资料链接:
team-learning-program/PythonLanguage/17. 文件与文件系统.md

你可能感兴趣的:(Python)