前面講到json是特殊的字符串。其實,csv也是一種字符串文件的格式,它組織數(shù)據(jù)的語法就是在字符串之間加分隔符——行與行之間是加換行符,同列之間是加逗號分隔。
它可以用任意的文本編輯器打開(如記事本),也可以用Excel打開,還可以通過Excel把文件另存為csv格式(因為Excel支持csv格式文件)。
將我們剛剛寫入的csv文件下載到本地電腦,再用記事本打開,你會看到:
用Excel打開,則是這樣的:
發(fā)現(xiàn)了嗎?csv文件里的逗號可以充當分隔同列字符串的作用。
用csv格式存儲數(shù)據(jù),讀寫比較方便,易于實現(xiàn),文件也會比Excel文件小。但csv文件缺少Excel文件本身的很多功能,比如不能嵌入圖像和圖表,不能生成公式。
存儲數(shù)據(jù)的基礎知識
存儲成csv格式文件和存儲成Excel文件,這兩種不同的存儲方式需要引用的模塊也是不同的。操作csv文件我們需要借助csv模塊;操作Excel文件則需要借助openpyxl模塊。
csv格式文件寫入與讀取。
首先,我們要引用csv模塊。因為Python自帶了csv模塊,所以我們不需要安裝就能引用它。
你是不是會困惑,明明前面csv寫入我們可以直接用open函數(shù)來寫,為什么現(xiàn)在還要先引用csv模塊?答案:直接運用別人寫好的模塊,比我們使用open()函數(shù)來讀寫,語法更簡潔,功能更強大,待會你就能感受到。
import csv
#引用csv模塊。
csv_file = open('demo.csv','w',newline='',encoding='utf-8')
#創(chuàng)建csv文件,我們要先調(diào)用open()函數(shù),傳入?yún)?shù):文件名“demo.csv”、寫入模式“w”、newline=''、encoding='utf-8'。
加newline=’ '參數(shù)的原因是,可以避免csv文件出現(xiàn)兩倍的行距(就是能避免表格的行與行之間出現(xiàn)空白行)。加encoding=‘utf-8’,可以避免編碼問題導致的報錯或亂碼。
創(chuàng)建完csv文件后,我們要借助csv.writer()函數(shù)來建立一個writer對象。
import csv
#引用csv模塊。
csv_file = open('demo.csv','w',newline='',encoding='utf-8')
#調(diào)用open()函數(shù)打開csv文件,傳入?yún)?shù):文件名“demo.csv”、寫入模式“w”、newline=''、encoding='utf-8'。
writer = csv.writer(csv_file)
# 用csv.writer()函數(shù)創(chuàng)建一個writer對象。
那怎么往csv文件里寫入新的內(nèi)容呢?答案是——調(diào)用writer對象的writerow()方法。
writer.writerow([‘電影’,‘豆瓣評分’])
#借助writerow()函數(shù)可以在csv文件里寫入一行文字 "電影"和“豆瓣評分”.
提醒:writerow()函數(shù)里,需要放入列表參數(shù),所以我們得把要寫入的內(nèi)容寫成列表。就像[‘電影’,‘豆瓣評分’]。
import csv
#引用csv模塊。
csv_file = open('demo.csv','w',newline='',encoding='utf-8')
#調(diào)用open()函數(shù)打開csv文件,傳入?yún)?shù):文件名“demo.csv”、寫入模式“w”、newline=''、encoding='utf-8'。
writer = csv.writer(csv_file)
# 用csv.writer()函數(shù)創(chuàng)建一個writer對象。
writer.writerow(['電影','豆瓣評分'])
#調(diào)用writer對象的writerow()方法,可以在csv文件里寫入一行文字 “電影”和“豆瓣評分”。
writer.writerow(['銀河護衛(wèi)隊','8.0'])
#在csv文件里寫入一行文字 “銀河護衛(wèi)隊”和“8.0”。
writer.writerow(['復仇者聯(lián)盟','8.1'])
#在csv文件里寫入一行文字 “復仇者聯(lián)盟”和“8.1”。
csv_file.close()
#寫入完成后,關閉文件就大功告成啦!
Mac的編碼方式是‘gbk’
用csv模塊寫入數(shù)據(jù)這一個知識點我們已經(jīng)清楚。接下來我們可以繼續(xù)學習怎么讀取csv文件的數(shù)據(jù)。
import csv
csv_file=open('demo.csv','r',newline='',encoding='gbk')
reader=csv.reader(csv_file)
for row in reader:
print(row)
第1、2行代碼:導入csv模塊。用open()打開“demo.csv”文件,‘r’是reader讀取模式,newline=’'是避免出現(xiàn)兩倍行距。encoding='utf-8’能避免編碼問題導致的報錯或亂碼。
第3行代碼:用csv.reader()函數(shù)創(chuàng)建一個reader對象。
第4、5行代碼:用for循環(huán)遍歷reader對象的每一行。打印row,就能讀取出“demo.csv”文件里的內(nèi)容。
補充一點:csv模塊本身還有很多函數(shù)和方法,附上csv模塊官方文檔鏈接:
https://yiyibooks.cn/xx/python_352/library/csv.html#module-csv
Excel寫入與讀取
一個Excel文檔也稱為一個工作薄(workbook),每個工作薄里可以有多個工作表(wordsheet),當前打開的工作表又叫活動表。
每個工作表里有行和列,特定的行與列相交的方格稱為單元格(cell)。比如上圖第A列和第1行相交的方格我們可以直接表示為A1單元格。
mport openpyxl
#引用openpyxl 。
wb = openpyxl.Workbook()
#利用openpyxl.Workbook()函數(shù)創(chuàng)建新的workbook(工作薄)對象,就是創(chuàng)建新的空的Excel文件。
創(chuàng)建完新的工作薄后,還得獲取工作表。不然程序會懵逼,不知道要把內(nèi)容寫入哪張工作表里。
sheet = wb.active
#wb.active就是獲取這個工作薄的活動表,通常就是第一個工作表。
sheet.title = 'new title'
#可以用.title給工作表重命名。現(xiàn)在第一個工作表的名稱就會由原來默認的“sheet1”改為"new title"。
添加完工作表,我們就能來操作單元格,往單元格里寫入內(nèi)容。
sheet['A1'] = '漫威宇宙'
#把'漫威宇宙'賦值給第一個工作表的A1單元格,就是往A1的單元格中寫入了'漫威宇宙'。
如果我們想往工作表里寫入一行內(nèi)容的話,就得用到append函數(shù)。
row = ['美國隊長','鋼鐵俠','蜘蛛俠']
#把我們想寫入的一行內(nèi)容寫成列表,賦值給row。
sheet.append(row)
#用sheet.append()就能往表格里添加這一行文字。
如果我們想要一次性寫入的不止一行,而是多行內(nèi)容,又該怎么辦?
rows = [['美國隊長','鋼鐵俠','蜘蛛俠'],['是','漫威','宇宙', '經(jīng)典','人物']]
#先把要寫入的多行內(nèi)容寫成列表,再放進大列表里,賦值給rows。
for i in rows:
sheet.append(i)
#遍歷rows,同時把遍歷的內(nèi)容添加到表格里,這樣就實現(xiàn)了多行寫入。
print(rows)
#打印rows
成功寫入后,我們千萬要記得保存這個Excel文件,不然就白寫啦!
wb.save('Marvel.xlsx')
#保存新建的Excel文件,并命名為“Marvel.xlsx”
這樣,Excel文件寫入的代碼我們就寫好了
import openpyxl
wb=openpyxl.Workbook()
sheet=wb.active
sheet.title='new title'
sheet['A1']='漫威宇宙'
rows=[['美國隊長','鋼鐵俠','蜘蛛俠'],['是','漫威','宇宙','經(jīng)典','的','人物']]
for i in rows:
sheet.append(i)
print(rows)
wb.save('Marvel.xlsx')
Excel文件的讀取
import openpyxl
#寫入的代碼:
wb = openpyxl.Workbook()
sheet = wb.active
sheet.title = 'new title'
sheet['A1'] = '漫威宇宙'
rows = [['美國隊長','鋼鐵俠','蜘蛛俠','雷神'],['是','漫威','宇宙', '經(jīng)典','人物']]
for i in rows:
sheet.append(i)
print(rows)
wb.save('Marvel.xlsx')
#讀取的代碼:
wb = openpyxl.load_workbook('Marvel.xlsx')
sheet = wb['new title']
sheetname = wb.sheetnames
print(sheetname)
A1_cell = sheet['A1']
A1_value = A1_cell.value
print(A1_value)
第14行代碼:調(diào)用openpyxl.load_workbook()函數(shù),打開“Marvel.xlsx”文件。
第15行代碼:獲取“Marvel.xlsx”工作薄中名為“new title”的工作表。
第16、17行代碼:sheetnames是用來獲取工作薄所有工作表的名字的。如果你不知道工作薄到底有幾個工作表,就可以把工作表的名字都打印出來。
第18-20行代碼:把“new title”工作表中A1單元格賦值給A1_cell,再利用單元格value屬性,就能打印出A1單元格的值。
openpyxl模塊的官方文檔:
https://openpyxl.readthedocs.io/en/stable/
更多文章、技術交流、商務合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
