Python-9-文件与文件系统

文件与文件系统

文件与文件系统

  1. 打开文件

open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)

  • file:文件路径,既可以是绝对路径,也可以是相对路径
  • buffering:设置缓冲
  • encoding:一般使用 utf8
  • errors:报错级别
  • newline:区分换行符
  • model:文件打开方式,可选
打开模式执行操作
‘r’以只读方式打开文件,文件的指针将会放在文件的开头
‘w’打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除;如果该文件不存在,创建新文件。
‘x’写模式,新建一个文件,如果该文件已存在则会报错
‘a’追加模式,打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾,新的内容将会被写入到已有内容之后;如果该文件不存在,创建新文件进行写入
‘b’以二进制模式打开文件,一般用于非文本文件,如图片
‘t’以文本模式打开(默认),一般用于文本文件,如txt
‘+’可读写模式(可添加到其它模式中使用)
  1. 文件对象方法
  • fileObject.close()
    用于关闭一个已打开的文件。关闭后的文件不能再进行读写操作, 否则会触发ValueError错误
  • fileObject.read([size])
    用于从文件读取指定的字符数,如果未给定或为负则读取所有
  • fileObject.readline()
    读取整行,包括 “\n” 字符
  • fileObject.readlines()
    用于读取所有行(直到结束符 EOF)并返回列表,
  • fileObject.tell()
    返回文件的当前位置,即文件指针当前位置
  • fileObject.seek(offset[, whence])
    用于移动文件读取指针到指定位置
    offset:开始的偏移量,表示需要移动偏移的字节数,如果是负数表示从倒数第几位开始;
    whence:可选,默认值为 0。给 offset 定义一个参数,表示要从哪个位置开始偏移;0 代表从文件开头开始算起,1 代表从当前位置开始算起,2 代表从文件末尾算起
	f = open('将进酒.txt', 'r')
	line = f.readline()
	print(line)	# 君不见,黄河之水天上来,奔流到海不复回。
	line = f.readline()
	print(line)	# 君不见,高堂明镜悲白发,朝如青丝暮成雪。
	f.seek(0, 0)
	line = f.readline()
	print(line)	# 君不见,黄河之水天上来,奔流到海不复回。
	f.close()
  • fileObject.write(str)
    用于向文件中写入指定字符串,返回写入字符的长度
    在文件关闭前或缓冲区刷新前,字符串内容存储在缓冲区中,此时文件中还没有要写入的内容
    如果文件打开模式带b,那写入文件内容时,str参数要用encode方法转为bytes形式,否则报错:TypeError: a bytes-like object is required, not ‘str’。
	f = open('workfile.txt', 'wb+')
	print(f.write(b'0123456789abcdef'))  # 16
	print(f.seek(5))  # 5
	print(f.read(1))  # b'5'
	print(f.seek(-3, 2))  # 13
	print(f.read(1))  # b'd'
  • fileObject.writelines(sequence)
    向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符 \n
  1. 简洁的 with 语句

    关键词 with 语句可以保证诸如文件之类的对象在使用完之后一定会正确的执行它的清理方法

OS 模块中关于文件/目录常用的函数

不同操作系统底层对于文件系统访问的工作原理是不一样的,OS(Operation System)模块用于选择正确的模块并调用,不需要考虑操作系统的差异

  • os.getcwd()
    返回当前工作目录
    os.chdir(path)
    改变当前工作目录到指定的路径
  • os.listdir (path='.')
    返回path指定的文件夹包含的文件或文件夹的名字的列表
  • os.mkdir(path)
    创建单层目录,如果该目录已存在抛出异常
  • os.makedirs(path)
    用于递归创建多层目录,如果该目录已存在抛出异常
  • os.remove(path)
    用于删除指定路径的文件。如果指定的路径是一个目录,将抛出 OSError
  • os.rmdir(path)
    用于删除单层目录。仅当这文件夹是空的才可以, 否则, 抛出 OSError
  • os.removedirs(path)
    递归删除目录,从子目录到父目录逐层尝试删除,遇到目录非空则抛出异常。
  • os.rename(src, dst)
    用于命名文件或目录,从 srcdst,如果 dst 是一个存在的目录, 将抛出 OSError
  • os.system(command)
    运行系统的shell命令(将字符串转化成命令)
  • os.curdir
    指代当前目录
    os.pardir
    指代上一级目录
    os.sep
    输出操作系统特定的路径分隔符(win下为\\,Linux下为/
    os.linesep
    当前平台使用的行终止符(win下为\r\n,Linux下为\n
    os.name
    指代当前使用的操作系统
  • os.path.basename(path)
    去掉目录路径,单独返回文件名
    os.path.dirname(path)
    去掉文件名,单独返回目录路径
    os.path.join(path1[, path2[, ...]])
    path1path2 各部分组合成一个路径名
    os.path.split(path)
    割文件名与路径,返回(f_path,f_name)元组。如果完全使用目录,它会将最后一个目录作为文件名分离,且不会判断文件或者目录是否存在
    os.path.splitext(path)
    分离文件名与扩展名,返回(f_path,f_name)元组
  • os.path.getsize(file)
    返回指定文件大小,单位是字节
    os.path.getatime(file)
    返回指定文件最近的访问时间
    os.path.getctime(file)
    返回指定文件的创建时间
    os.path.getmtime(file)
    返回指定文件的最新的修改时间
    返回值均为浮点型秒数,可用time模块的gmtime()localtime()函数换算
  • os.path.exists(path)
    判断指定路径(目录或文件)是否存在
    os.path.isabs(path)
    判断指定路径是否为绝对路径
    os.path.isdir(path)
    判断指定路径是否存在且是一个目录
    os.path.isfile(path)
    判断指定路径是否存在且是一个文件
    os.path.islink(path)
    判断指定路径是否存在且是一个符号链接
    os.path.ismount(path)
    判断指定路径是否存在且是一个悬挂点
    os.path.samefile(path1,path2)
    判断path1和path2两个路径是否指向同一个文件

序列化与反序列化

Python 的 pickle 模块实现了基本的数据序列和反序列化

通过 pickle 模块的序列化操作能够将程序中运行的对象信息保存到文件中去,永久存储;
通过 pickle 模块的反序列化操作,能够从文件中创建上一次程序保存的对象。

最常用的函数为:

  • pickle.dump(obj, file, [,protocol]) # 将obj对象序列化存入已经打开的file中
    obj:想要序列化的obj对象
    file:文件名称
    protocol:序列化使用的协议。如果该项省略,则默认为0。如果为负值或HIGHEST_PROTOCOL,则使用最高的协议版本

  • pickle.load(file) # 将file中的对象序列化读出

练习题

  1. 打开中文字符的文档时,会出现乱码,Python自带的打开文件是否可以指定文字编码?还是只能用相关函数?
    open 方法可以指定要打开文件的编码方式

  2. 编写程序查找最长的单词

"""
Input file
   test.txt
   
Output file
   ['general-purpose,', 'object-oriented,']
"""

def longest_word(filename):
	dic = {}
	f = open(filename, 'r')
	lines = f.readlines()
	for line in lines:
    	line = line.split(',')
    	for charac in line:
        	dic[charac] = len(charac)
	ma = max(dic.values())
	keys = []
	for key, value in dic.items():
    	if value == ma:
        	keys.append(key)
    f.close()
	return keys

	
	
	
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值