Task 9 文件与文件系统
群内编号:129-木铎铎
本次活动最后一次打卡,感谢Datawhale的付出和无私帮助!
1. 文件与文件系统
打开文件
open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)
Open file and return a stream. Raise OSError upon failure.
file: 必需,文件路径(相对或者绝对路径)。
mode: 可选,文件打开模式
buffering: 设置缓冲
encoding: 一般使用utf-8
errors: 报错级别
newline: 区分换行符
f = open('月下独酌.txt', 'r', encoding='UTF-8')
print(f)
# <_io.TextIOWrapper name='月下独酌.txt' mode='r' encoding='cp936'>for each in f:print(each)
'''
李白 [唐]花间一壶酒,独酌无相亲。举杯邀明月,对影成三人。月既不解饮,影徒随我身。暂伴月将影,行乐须及春。我歌月徘徊,我舞影零乱。醒时相交欢,醉后各分散。永结无情游,相期邈云汉。
'''
文件对象方法
fileObject.close()
用于关闭一个已打开的文件。关闭后的文件不能再进行读写操作, 否则会触发ValueError错误。fileObject.read([size])
用于从文件读取指定的字符数,如果未给定或为负则读取所有。
f = open('月下独酌.txt', 'r')
line = f.read(20)
print("读取的字符串: %s" % line)
'''
读取的字符串: 李白 [唐]
花间一壶酒,独酌无相亲。
(这一个空行的出现是因为读取了换行符)
'''
f.close()
fileObject.readline()
读取整行,包括 “\n” 字符。fileObject.readlines()
用于读取所有行(直到结束符 EOF)并返回列表,该列表可以由 Python 的 for… in … 结构进行处理。
f = open('月下独酌.txt', 'r')
lines = f.readlines()
print(lines)for each in lines:each.strip()print(each)
fileObject.tell()
返回文件的当前位置,即文件指针当前位置。fileObject.seek(offset[, whence])
用于移动文件读取指针到指定位置。
offset 开始的偏移量,也就是代表需要移动偏移的字节数,如果是负数表示从倒数第几位开始。
whence 可选,默认值为 0。给 offset 定义一个参数,表示要从哪个位置开始偏移;0 代表从文件开头开始算起,1 代表从当前位置开始算起,2 代表从文件末尾算起。fileObject.write(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'
在文件关闭前或缓冲区刷新前,字符串内容存储在缓冲区中,这时你在文件中是看不到写入的内容的。
如果文件打开模式带b,那写入文件内容时,str(参数)要用encode方法转为bytes形式,否则报错:
TypeError: a bytes-like object is required, not 'str'
。
str = '...'
# 文本 = Unicode字符序列
# 相当于 string 类型str = b'...'
# 文本 = 八位序列(0到255之间的整数)
# 字节文字总是以‘b’或‘B’作为前缀;它们产生一个字节类型的实例,而不是str类型。
# 相当于 byte[]
fileObject.writelines(sequence)
向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符\n。
简洁的 with 语句
一些对象定义了标准的清理行为,无论系统是否成功的使用了它,一旦不需要它了,那么这个标准的清理行为就会执行。
关键词 with 语句就可以保证诸如文件之类的对象在使用完之后一定会正确的执行它的清理方法。
这段代码执行完毕后,就算在处理过程中出问题了,文件 f 总是会关闭。
try:with open('myfile.txt', 'w') as f:for line in f:print(line)
except OSError as error:print('出错啦!%s' % str(error))# 出错啦!not readable
2. OS 模块中关于文件/目录常用的函数
有了OS(Operation System)模块,我们不需要关心什么操作系统下使用什么模块,OS模块会帮你选择正确的模块并调用。
os.getcwd()
用于返回当前工作目录。os.chdir(path)
用于改变当前工作目录到指定的路径。listdir (path='.')
返回path指定的文件夹包含的文件或文件夹的名字的列表。
import osdirs = os.listdir()
for item in dirs:print(item)
os.mkdir(path)
创建单层目录,如果该目录已存在抛出异常。
import osif os.path.isdir(r'.\b') is False:os.mkdir(r'.\B')os.mkdir(r'.\B\A')os.mkdir(r'.\C\A') # FileNotFoundError
os.makedirs(path)
用于递归创建多层目录,如果该目录已存在抛出异常。os.remove(path)
用于删除指定路径的文件。如果指定的路径是一个目录,将抛出 OSError。os.rmdir(path)
用于删除单层目录。仅当这文件夹是空的才可以, 否则, 抛出 OSError。os.removedirs(path)
递归删除目录,从子目录到父目录逐层尝试删除,遇到目录非空则抛出异常。os.rename(src, dst)
方法用于命名文件或目录,从 src 到 dst,如果 dst 是一个存在的目录, 将抛出 OSError。os.system(command)
运行系统的shell命令(将字符串转化成命令)
例 先自行创建一个a.py的文件,然后由shell命令打开。
import ospath = os.getcwd() + '\\a.py'
a = os.system(r'python %s' % path)os.system('calc') # 打开计算器
3. 序列化与反序列化
Python 的 pickle 模块实现了基本的数据序列和反序列化。
- 通过 pickle 模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储。
- 通过 pickle 模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象。
pickle模块中最常用的函数为:
1)pickle.dump(obj, file, [,protocol])
将obj
对象序列化存入已经打开的file
中。
obj
:想要序列化的obj
对象。
file
:文件名称。
protocol
:序列化使用的协议。如果该项省略,则默认为0。如果为负值或HIGHEST_PROTOCOL,则使用最高的协议版本。
2)pickle.load(file)
将file
中的对象序列化读出。
file
:文件名称。
import pickledataList = [[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'}}
练习题
1、打开中文字符的文档时,会出现乱码,Python自带的打开文件是否可以指定文字编码?还是只能用相关函数?
答 自带的打开文件可以指定文字编码,如打开中文是可使用命令f = open('月下独酌.txt', 'r', encoding='UTF-8')
2、编写程序查找最长的单词
输入文档: res/test.txt
题目说明:
"""Input filetest.txt'''文本内容来自 chinadaily 2020-08-07日电http://www.chinadaily.com.cn/a/202008/07/WS5f2d0e31a31083481725efaf.html'''Output file'international'"""
import re
def longest_word(filename):maxlen = 0maxword = ''for line in open(filename, 'r', encoding='UTF-8'):line = re.split('\W+', line)for i in range(len(line)):if len(line[i]) > maxlen:maxword = line[i]maxlen = len(line[i])return maxword
longest_word('test.txt')
Task 9 文件与文件系统相关推荐
- s-stat 查看文件或者文件系统的状态信息
命令用法 stat [OPTION]... FILE... -L 查看链接文件 -f 查看文件系统信息,而非文件信息 -c --format=%a 支持使用格式化字符串输出结果,支持\n,\t等转义字 ...
- linux 函数 缩小文件,linux文件系统的处理函数
文件系统 通用:rename(原路径名,新路径名); 修改文件名 remove(路径名); 删除文件或路径 symlink(原路径名,符号链接名); 建立文件或路径的软链接 access ...
- c++创建文件_JavaNote 文件系统及Java文件基本操作
文件概述 文件系统是由OS(操作系统)管理的: 文件系统和Java进程是平行的,是两套系统: 文件系统是由文件夹和文件递归组合而成: 文件目录分隔符 Linux/Unix 用/隔开 Windows用隔 ...
- 六、文件管理(1.文件和文件系统)
文件和文件系统 一. 文件.记录和数据项 1. 数据项 ①基本数据项:由数据名和数据类型组成,是数据组织中可以命名的逻辑数据单位(原子数据),例如:姓名(符串类型),年龄(整型). ②组合数据项:有若 ...
- 文件管理之文件和文件系统
文件是数据的一种组织形式,而文件管理系统是指文件和对文件进行操纵和管理的软 件集合. 数据的组成 基于文件系统的概念而把数据的组成分为数据项.记录和文件三级 ⑴ 数据项: 基本数据项----用于描述一 ...
- datawhale组队学习task9—文件与文件系统
1. 文件与文件系统 打开文件 open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, close ...
- Python学习 Task9:文件与文件系统
Task9:文件与文件系统 文件与文件系统 1.1 打开文件 1.2 文件对象方法 1.3 简洁的 with 语句 文件与文件系统 1.1 打开文件 open(file, mode='r', buff ...
- Python基础语法笔记(十六)文件与文件系统
Reference https://github.com/datawhalechina/team-learning-program/blob/master/PythonLanguage 1. 文件与文 ...
- Python_Task09:文件与文件系统
文件与文件系统 学习教程 1. 文件与文件系统 打开文件 文件对象方法 简洁的 with 语句 2. OS 模块中关于文件/目录常用的函数 3. 序列化与反序列化 练习题 学习教程 转自:https: ...
最新文章
- 做一个快乐的产品经理
- Tiny210编译和烧写u-boot步骤
- python自定义全局异常_flask中主动抛出异常及统一异常处理代码示例
- 多线程基础-实现多线程的两种方式(二)
- leetcode24. 两两交换链表中的节点
- 图像 pipeline_多面体优化,Pipeline与深度学习编译器
- oracle同机单实例加入集群,将oracle同机单实例加入rac集群的操作步骤
- 关于C#绘制qq好友列表控件
- java 3d文字旋转_3d多物体点旋转
- python 协程爬虫_Python爬虫进阶教程(二):线程、协程
- 《ES6标准入门》学习笔记
- 拓端tecdat|Python高维统计建模变量选择:SCAD平滑剪切绝对偏差惩罚、Lasso惩罚函数比较
- 鞋店商城小程序开发价值
- 网易云音乐刷了我的过去...
- win10系统迁移至SSD
- apache基金会开源项目简介
- wordpress制作微信小程序源码
- 树莓派无法识别摄像头+树莓派中opencv调用视频流人脸检测
- 【工程应用七】接着折腾模板匹配算法 (Optimization选项 + no_pregeneration模拟 + 3D亚像素插值)...
- ActivityNet数据集解析
热门文章
- 个人使用向7:easypoi EXCEL导入去空格
- VMware中三种网络适配器
- 60款流行网络工具的开源替代选择
- ntp 服务:Server dropped: Strata too high
- 定义一个集合类setColour,要求元素为枚举类型值
- 计算机网络的定义中的三个关键词,计算机网络应用基础概述论文(2)
- P1422 小玉家的电费
- 五连阳回调买入法_如何精准买在洗盘结束时?“4连阳+1阴”形态,不要犹豫,出现即满仓买进,这可能是抄底最佳时机...
- 记录在小程序中前端调用百度 Ocr 识别身份证信息
- linux 网络设备,网卡配置 ,相关