七:文件和数据格式化
文件和数据各式化
文件的使用
文件的类型
文本文件:
- 由单一特定编码组成的文件,如UTF-8编码
- 由于存在编码,也被看成是存储着的长字符串
- 适用于例如:.txt文件、.py文件等。
二进制文件:
- 直接由比特0和1组成,没有统一字符编码
- 一般存在二进制0和1的组织结构,即文件格式
- 适用于例如:.png文件、.avi文件等。
文件的理解
文件是数据的抽象和集合:
- 文件是储存在辅助存储器上的数据序列
- 本质上,所有文件都是二进制形式存储
- 形式上,所有文件采用两种方式展示
文件的打开和关闭
文件路径:
打开:<变量名> = open(<文件名>, <打开模式>) 关闭:<变量名>.close()
文件路径和名称 "D:/PYE/f.txt" "./PYE/f.txt"
源文件同目录可省路径 "D:\\PYE\\f.txt" "f.txt"
文件的打开模式 | 描述 |
'r' | 只读模式,默认值,如果文件不存在,返回FileNotFoundError |
'w' | 覆盖写模式,文件不存在则创建,存在则完全覆盖 |
'x' | 创建写模式,文件不存在则创建,存在则返回FileExistsError |
'a' | 追加写模式,文件不存在则创建,存在则在文件最后追加内容 |
'b' | 二进制文件模式 |
't' | 文本文件模式,默认值 |
'+' | 与r/w/x/a一同使用,在原功能基础上增加同时读写功能 |
文件内容的读取
操作方法 | 描述 |
<f>.read(size = -1) |
读入全部内容,如果给出参数,读入前size长度 s = f.read(2) 中国 |
<f>.readline(size = -1) |
读入一行内容,如果给出参数,读入该行前size长度 s = f.readline() 中国是一个伟大的国家 |
<f>.readlines(hint = -1) |
读入文件所有行,以每行为元素形成列表,如果给出参数,读入前hint行 s = f.readlines() ['中国是一个伟大的国家'] |
1 fname = input("请输入要打开的文件名称")
2 fo = open(fname, "r")
3 #遍历全文本:方法一(一次读入,统一处理)
4 txt = fo.read()
5 #遍历全文本:方法二(按数量读入,逐步处理)
6 txt = fo.read(2)
7 while txt != "":
8 txt = fo.read(2)
9 #逐行遍历文件:方法一(一次读入,分行处理)
10 for line in fo.readlines():
11 print(line)
12 #逐行遍历文件:方法二(分行读入,逐行处理)
13 for line in fo:
14 print(line)
15 fo.close()
数据的文件写入
操作方法 | 描述 |
<f>.write(s) |
向文件写入一个字符串或字节流 f.write("中国是个伟大的国家") |
<f>.writelines(lines) |
将一个元素全为字符串的列表写入文件 ls = ["中国","法国","美国"] f.writelines(ls) 中国法国美国 |
<f>.seek(offset) |
改变当前文件操作指针的位置,offset含义如下: 0-文件开头;1-当前位置;2-文件结尾 f.seek(0) |
1 fo = open("output.txt", "w+")
2 ls = ["中国","法国","美国"]
3 fo.writelines(ls)
4 #(没有任何输出)
5 for line in fo:
6 print(line)
7 #(输出:中国法国美国)
8 fo.seek(0)
9 for line in fo:
10 print(line)
11 fo.close()

1 #AutoTraceDraw.py
2 import turtle as t
3 t.title('自动轨迹绘制')
4 t.setup(800, 600, 0, 0)
5 t.pencolor("red")
6 t.pensize(5)
7 #数据读取
8 datals = []
9 f = open("data.txt")
10 for line in f:
11 line = line.replace("\n","")
12 datals.append(list(map(eval, line.split(","))))
13 f.close()
14 #自动绘制
15 for i in range(len(datals)):
16 t.pencolor(datals[i][3],datals[i][4],datals[i][5])
17 t.fd(datals[i][0])
18 if datals[i][1]:
19 t.rt(datals[i][2])
20 else:
21 t.lt(datals[i][2])
一维数据的格式化和处理
数据组织的维度
- 维度:一组数据的组织形式
- 一维数据:由对等关系的有序或无序数据构成,采用线性方式组织。例如:列表、数组和集合
- 二维数据:由多个一维数据构成,是一维数据的组合形式。例如:表格
- 多维数据:由一维数据在新维度上扩展形成。
- 高维数据:仅利用最基本的二次元关系展示数据间的复杂结构。例如:字典
- 数据的操作周期:存储 <-> 表示 <-> 操作
一维数据的表示
- 有序:列表类型
- 无序:集合类型
一维数据的储存
1.空格分隔:使用一个或多个空格分隔进行存储,不换行(缺点:数据中不能存在空格)
例如:中国 美国 日本 法国
2.逗号分隔:使用英文半角逗号分隔数据进行存储,不换行(缺点:数据中不能有英文逗号)
例如:中国,美国,日本,法国
3.其他方式:使用其他符号或符号组合分隔,建议采用特殊符号(缺点:需要根据数据特点定义,通用性较差)
例如:中国&美国&日本&法国
一维数据的处理
读入:
1 fname = input("请输入要打开的文件名称")
2 txt = open(fname).read()
3 #从空格分隔的文件中读入数据
4 ls = txt.split()
5 #从特殊符号分隔的文件中读入数据
6 ls = txt.split("&")
7 f.close()
8 ['中国','美国','日本']
写入:
1 fname = input("请输入要打开的文件名称")
2 ls = ['中国','美国','日本']
3 f = open(fname, 'w')
4 #空格
5 f.write(' '.join(ls))
6 #特殊符
7 f.write('$'.join(ls))
8 f.close()
二维数据的格式化和处理
二维数据的表示
- 使用列表类型。
- 外层列表每个元素可以对应一行,也可以对应一列。
- [[3.1,3.2,3.4],[3.2,3.4,4.2]]
CSV格式与二维数据的存储
- 国际通用的一二维数据存储格式,一般.csv扩展名
- Excel和一般编辑软件都可以读入或另存为csv文件
- 如果某个元素缺失,逗号仍要保留
- 二维数据的表头可以作为数据存储,也可以另行存储
- 逗号为英文半角逗号,逗号与数据之间无额外空格
- 一般索引习惯:ls[row][column],先行后列
- 根据一般习惯,外层列表每个元素是一行,按行存
二维数据的处理
1 fname = input("请输入要打开的文件名称")
2 #CSV格式的文件中读入数据
3 fo = open(fname)
4 ls = []
5 for line in fo:
6 line = line.replace("\n","")
7 ls.append(line.split(","))
8 #将数据写入CSV格式的文件
9 ls = [[],[],[]]
10 f = open(fname, 'w')
11 for itme in ls:
12 f.write(','.join(item) + '\n')
13 #采用二层循环
14 ls = [[1,2],[3.4],[5.6]]
15 for row in ls:
16 for column in row:
17 print(column)
18 fo.close()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」