一维数据和二维数据
Posted kenny-feng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一维数据和二维数据相关的知识,希望对你有一定的参考价值。
此文章为本人学习所得,如有不足之处,欢迎指正,分享原创,一起进步
维度:数据的组织形式
一维数据
由对等关系的有序或无序数据构成,采用线性方式(一条直线排开)组织
对等关系:这些数据平级关系(不是包含、从属关系)
一维数据的表示-----
如果数据间有序:使用列表类型。如:一维列表ls = [3.1 , 3.02 , 4.15]
如果数据间无序:使用集合类型,如:一维集合st = 4.15 , 3.02 , 3.1
切记:for循环可以遍历数据,进而对每个数据进行处理
一维数据的存储-----
方式:空格分隔、逗号分隔、特殊符号(如:$)
缺点:数据中不能出现分隔符
原因:用某符号作为数据的分隔符,那么数据本身就不能出现该符号,否则就无法判断是分隔符还是一个标点符号,所以选择根据数据的特点,去选择哪种符号作为分隔符
一维数据的处理-----
(一)读入:从以$为分隔符的文件中读入数据。文件→解释器(idle中)
1 fi=open(“abc.txt”) 2 txt = fi.read() #得到一整串的str文本 3 ls=txt.split("$") #文件的分隔符是什么,str.split()中的符号就是什么。得到以这些数据为str元素的列表。若每行有回车,则换行符属于最后一个数据的一部分 4 fi.close()
Example1:(以一个$作为分隔符)
结果:
Example2:(以两个$作为分隔符)
结果:
(二)写入:将以$为分隔符的数据写入文件。解释器(idle中)→文件
1 ls=[‘中国‘,‘美国‘,‘日本‘] #这是将要写入文件的数据,用列表形式组织(存放再idle中) 2 fi=open("123.txt","w") #创建空文件并待写(做好写入的准备,但还没开始写入),如果已有该文件,则会先清空之前的内容,再处于待写状态 3 txt = "@".join(ls) #打算用哪种分隔符,就用哪种。"".join的作用:将引号内的符号插进列表ls的元素之间,并去掉中括号和各元素外面的引号 4 fi.write(txt) 5 fi.close()
结果:
二维数据
由多个一维数据构成,是一维数据的组合形式。也称为表格数据,其中,表头是二维数据的一部分,也可以不作为其中的一部分
二维数据的表示-----
用二维列表表示
二维列表:本身是列表,里面的元素也是列表,即列表内还有列表。如下:
里面的元素之间可以不换行,但必须要有分隔符。里面元素之间的排版随意,但为了美观,建议换行且对齐工整:
二维数据的存储-----
ls[row][column],先行后列,按行存
CSV数据存储格式
(一)语法规则:
(1)CSV:Comma-Separated Values
(2)国际通用的一二维数据存储格式,一般.csv扩展名
(3)每行一个一维数据,无空行。采用逗号分隔,逗号为英文半角逗号,逗号与数据之间无额外空格
(4)Excel和txt均可读入输出,一般编辑软件都可以产生
(5)如果某个元素缺失,逗号仍要保留,二维数据的表头可以作为数据存储,也可以另行存储。如下:
(二)具体实例:
假设有“country.csv”文件如下:
step1:先看看从文件读入到 idle 中是什么情况:
1 fi = open("country.csv","r") 2 for c in fi: 3 print(c)
结果:
(三)实例结论:
(1)对比csv文件,读入是按行读入,且每行末尾隐含换行符,所以结果有空行(print语句不会打印出换行符\\n),所以在按行遍历时,要先去掉换行符。
(2)结果中的内容是逗号分隔,即遍历csv的过程中,将隐形的分隔符遍历了出来
(3)读取csv文件跟读取txt所返回的类型都是str。实际上,不管是什么文件,也不管文件的内容是什么类型,将文件读取到idle中,都是以str类型返回。如遍历句柄、read()、readline()等。如下:
1 fi = open("country.csv","r") 2 for c in fi: 3 print(type(c))
结果:
补充:
(一)删除每行末尾的换行符有三种方法:
(1)str.strip(“\\n”):删除首尾的”\\n”
(2)str.replace(“\\n”,””):替换”\\n”为空
(3)str = str[0:-1]:切片去掉末尾,临时性改变,必须赋值
(二)在idle中创建二维列表ls,并对里面的数据进行操作的方法:二层循环,逐一遍历。如下:
1 ls=[[],[],[],......,[]] 创建二维列表 2 for row in ls: 3 for column in row: 4 print(ls[row][column])
Notes:(无论一维还是二维)
(1)分隔符不能缺少:
(2)fi.close()不要缺少,否则写入数据后,目标文件还是原样,因为还没结束释放
(3)读入用到str.split(),写入用到str.join()
(4)切记:
读入:从文件读入到idle中,最终要将结果转为相应维度的列表形式。如文件是一维数据,则读取的最终结果应是一维列表 [ ];文件是二维数据,则读取的最终结果应是二维列表 [ [], [],......,[] ]
写入:从idle写入到文件中,最初要将数据变为列表形式。如想写入一维数据,则要用一维列表来组织这些数据 [ ] ;想写入二维数据,则用二维列表来组织这些数据 [ [],[],......,[] ],但最终要转为str形式,这样才能写入文件(不接受以list形式写入),否则:
以上是关于一维数据和二维数据的主要内容,如果未能解决你的问题,请参考以下文章