七:文件和数据格式化

文件和数据各式化

文件的使用

文件的类型

文本文件:

  • 由单一特定编码组成的文件,如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()
复制代码

wordcloud库

https://www.cnblogs.com/mojiunian/p/15885894.html

posted @   魔九念  阅读(256)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
点击右上角即可分享
微信分享提示