北理mooc学习笔记
文件的使用
- 文件时数据的抽象和集合
- 文件展现形态:文本文件和二进制文件
文本文件 | 二进制文件 |
---|---|
由单一特定编码组成的文件,如UTF-8编码 由于存在编码也被看成是存储着的长字符串 | 直接由比特0和1组成,没有统一字符编码 |
文件的打开
- 文件的打开模式
文件打开模式 | 描述 |
---|---|
‘r’ | 只读模式,默认值,如果文件不存在,返回FileNotDoundError |
‘w’ | 覆盖写模式,文件不存在则创建,存在则完全覆盖 |
‘x’ | 创建写模式,文件不存在则创建,存在则返回FileExistsError |
‘a’ | 追加写模式,文件不存在则创建,存在则在文件最后追加内容 |
‘b’ | 二进制文件模式 |
‘t’ | 文本文件模式,默认值 |
‘+’ | 与r/w/x/a一同使用,在原功能基础上同时增加读写功能 |
文件内容的读取
- 读取方法
操作方法 | 描述 |
---|---|
< f >.read(size= -1) | 读入全部内容,如果给出参数,读入前size长度 |
< f >.readline(size= -1) | 读入一行内容,如果给出参数,读入该行前size长度 |
< f >.readlines(hint= -1) | 读入所有行,以每行为元素形成列表 如果给出参数,读入前hint行 |
- 遍历全文本
# 一次读入,统一处理
fname = input("请输入要打开文件的名称:")
fo = open(fname,"r")
# 对全文txt进行处理
txt = fo.read()
fo.close()
# 按数量读入,逐步处理
fame = input("请输入要打开的文件名称:")
fo = open(fname,"r")
txt = fo.read(2) # 从文件中读入两个字节
while txt != "":
# 对txt进行处理
txt = fo.read(2)
fo.close()
- 逐行遍历文件
# 一次读入,分行处理
fname = input("请输入要打开文件的名称:")
fo = open(fname,"r")
for line in fo.readlines():
print(line)
fo.close
# 分行读入,逐行处理
fname = input("请输入要打开的文件名称")
fo = open(fname,"r")
for line in fo:
print(line)
fo.close()
数据的文件写入
操作方法 | 描述 |
---|---|
< f >.write(s) | 写入一个字符串或字节流 |
< f >.writrlines(lines) | 将一个元素全为字符串的列表写入文件 ls = [“北京”,“澳门”] f.writelines(ls) 北京澳门 |
< f >.seek(offset) | 改变当前文件操作指针的位置,offset含义如下: 0 -文件开头;1 -当前位置;2 -文件结尾 f.seek(0) # 回到文件开头 |
fo = open("a.txt","w+")
ls = ["北京","上海","广州"]
fo.writelines(ls)
# fo.seek(0)
for line in fo:
print(line)
fo.close
# 输出无信息 使用seek()函数,调整指针位置
数据格式化
一维数据格式化
- 对等关系的有序或无序数据构成,采用线性方式组织
- 列表、数组、集合
# 北京 上海 广州
# 从空格分隔的文件中读入数据
txt = open(fname).read()
# 从特殊符号分隔的文件中读入数据
# ls = txt.split("$")
ls = txt.split()
f.close()
>>>ls
ans-> ['北京','上海','广州']
# 采用空格分割的方式将数据写入文件
ls = ['北京','上海','广州']
f = open(fname,'w')
f.write(' '.join(ls))
f.close()
>>>ls
ans->['北京' '上海' '广州']
二维数据格式化
- 区别
一维数据 | 二维数据 |
---|---|
列表和集合类型 [3,4,5] 数据间有序 {3,5,4} 数据间有序 | 二维数据:列表类型(表格) [ [3,4,5], [5,4,3] ] |
CSV数据存储格式
Comma-Separated Values
- 国际通用一二维数据存储格式,一般.csv扩展名
- 每行一个一维数据,采用逗号分隔,无空行
- Excel和一般编辑软件都可以读入或另存为csv文件
- 是数据之间转换的通用格式
- 如果某个元素缺失,逗号仍要保留
- 二维数据的表头可以作为数据存储,也可以另行存储
- 读入数据
# 从CSV文件中读取数据写入二维列表
fo = open(fname)
ls = []
for line in fo:
line = line.replace("\n","")
ls.append(line.split(","))
fo.close
# 将数据写入CSV格式的文件
ls = [[],[],[]] # 二维列表
f = open(fname, 'w')
for item in s:
f.write(','.join(item)+'\n')
f.close()
# 元素遍历
ls = [[1,2],[3,4],[5,6]]
for row in ls:
for column in row:
print(colum)