此文章為本人學習所得,如有不足之處,歡迎指正,分享原創,一起進步
維度:數據的組織形式
一維數據
由對等關系的有序或無序數據構成,采用線性方式(一條直線排開)組織
對等關系:這些數據平級關系(不是包含、從屬關系)
一維數據的表示-----
如果數據間有序:使用列表類型。如:一維列表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形式寫入),否則: