pyhton——csv/excel數(shù)據(jù)持久化

一、CSV文件操作

1.1 讀操作:csv.read
import csv
with open("/路徑/文件名.csv","r") as csvfile  #固定寫法,使用open()方法,無需關(guān)閉file,'r'表示讀操作
    read=csv.reader(csvfile)                 #使用csv.reader()方法,讀取文件,返回可迭代類型
    for i in read:
    print i 
1.2 寫操作:csv.writer
import csv
with open("/路徑/文件名.csv","w") as csvfile    #'w'表示寫操作,有則修改,無則新建
    write=csv.writer(csvfile)
    write.writerow(data)        #寫入一行操作,data為可迭代類型,如果為字符串,則單個字符為一個元素
    write.writerows(data)       #寫入多行操作,data中一個元素為一行
1.3 添加數(shù)據(jù):csv.read--write
方法1:----------------------------------
    import csv
    list1=[]
    with open('data.csv','r')as csvfile1:        #首先---讀取數(shù)據(jù)
        read=csv.reader(csvfile1)
        for i in read:
            list1.append(i)
    with open('data.csv','w')as csvfile2:        #然后----寫入之前讀取的數(shù)據(jù)
        writer=csv.writer(csvfile2)
        date=[list1[0],                          #在第五行開始添加數(shù)據(jù)
              list1[1],
              list1[2],
              list1[3],
              ['Jack','104']]
        writer.writerows(date)
    with open('data.csv','r')as csvfile3:        #輸出添加后的數(shù)據(jù)
        read2=csv.reader(csvfile3)
        for i in read2:
            print(i)
方法2:
    #讀取文件    
    f = open("./data.csv")              #f是一個可迭代對象
    result = []                         #用于存放每一行的數(shù)據(jù)
    for line in f:
        row = line.split(",")           #將每一行數(shù)據(jù)用","分割,保存到一個列表中
        data = []
        for word in row:
            data.append(word.strip())   #(word.strip())去除數(shù)據(jù)中多余的空格
        result.append(data)
    f.close()
    print(result)

    #當(dāng)前文件夾下創(chuàng)建一個output.csv文件,將數(shù)據(jù)寫入到其中
    with open("output.csv","w") as csvFile:
        result.append(["Jack","104"])
        for row in result: 
            csvFile.write(",".join(row)+"\n") #將一個列表中的數(shù)據(jù)用","拼接成一個字符串
        csvFile.close()
方法3:                                         #使用DictReader方法讀寫  
    import csv
    def getData(path):                          #path讀取文件的路徑
        result = []
        with open(path) as file:
            reader = csv.DictReader(file)
            for row in reader:                  # row.keys()  ["name","stuNo"]
                newRow = {}                     # row.values()  ["ZhangSan","101"]
                for key,value in zip(row.keys(),row.values()): #獲取列名,列值并去空格
                    newRow[key.strip()] = value.strip()
                result.append(newRow)
        return result
    data = getData("./data.csv")
    with open("./output.csv","w") as csvFile:
        data = getData("./data.csv")
        data.append({"name":"Jack","stuNo":"104"})

        fields = ["name","stuNo"]                           #列標(biāo)題
        writer = csv.DictWriter(csvFile,fieldnames=fields)  #用csv模塊的dictwrite方法將字典寫入到csv文件
        writer.writeheader()                                #將csv文件的第一行(即列名寫入到csv文件)
        for row in data:                                    #遍歷字典寫入到csv文件中
            writer.writerow(row)
        csvFile.close()

二、excel的操作

2.1:使用 xlrd、xlwt (只讀、只寫)操作
xlrd 讀取文件:    
        import xlrd
        myWorkbook=xlrd.open_workbook('/路徑/文件名.xlsx')    #獲取excel工作簿
        mySheets=myWorkbook.sheets()                         #其次獲取所有的工作表
        mySheet1=myWorkbook[0]                               #獲取第一個工作表
        mySheet1=myWorkbook.sheet_by_index(0)                #同上
        mySheet1=myWorkbook.sheet_by_name('sheet1')          #同上

        nrows=mySheet1.nrows            #獲得所有的行數(shù),int類型
        ncols=mySheet1.ncols            #獲得所有的列數(shù),int類型
        myRowValue=mySheet1.row_value(i)        #獲得i列所有行的值
        myCell=mySheet1.cell(i,j)               #獲取i行,j列單元格
                myCell.value                    #通過單元格獲取值
        mySheet1.cell_value(i,j)                #直接獲取表sheet1的i行,j列的值
        mySheet1.cell_value(i,j)="new_value"    #直接賦值修改單元格的值:

xlwt 寫入文件:
        import xlwt
        new_wk=xlwt.Workbook()                   #創(chuàng)建工作簿
        new_sheet1=new_wk.add_sheet('sheetname') #創(chuàng)建名為sheetname的工作表
        sheet.write(i,j,'content')               #在i行,j列寫入內(nèi)容:content,i,j從0開始
        new_wk.save('/路徑/文件名.xlsx')          #使用xlwt寫入操作后,需要保存
2.2:xlutils 結(jié)合 xlrd (添加數(shù)據(jù))操作
讀、寫文件:               
    import xlrd
    from xlutils.copy import copy
    workBook=xlrd.open_workbook('/路徑/文件名.xlsx')        #參考xlrd讀操作
    new_workBook=copy(workBook)          #使用xlutils中copy()方法復(fù)制一份工作簿
    ws=new_workBook.get_sheet(index)     #get_sheet()方法,在僅導(dǎo)入xlrd時不可用,僅對使用copy()之后的工作簿可用

    ws.write(i,j,'content')              #在i行,j列寫入內(nèi)容:content,i,j從0開始,可覆蓋
    new_workBook.save('/路徑/文件名.xlsx')
2.3:使用 openpyxl 操作 (寫Excel神器)

寫入單個數(shù)據(jù)

創(chuàng)新互聯(lián)建站服務(wù)緊隨時代發(fā)展步伐,進行技術(shù)革新和技術(shù)進步,經(jīng)過10余年的發(fā)展和積累,已經(jīng)匯集了一批資深網(wǎng)站策劃師、設(shè)計師、專業(yè)的網(wǎng)站實施團隊以及高素質(zhì)售后服務(wù)人員,并且完全形成了一套成熟的業(yè)務(wù)流程,能夠完全依照客戶要求對網(wǎng)站進行成都做網(wǎng)站、網(wǎng)站建設(shè)、外貿(mào)營銷網(wǎng)站建設(shè)、建設(shè)、維護、更新和改版,實現(xiàn)客戶網(wǎng)站對外宣傳展示的首要目的,并為客戶企業(yè)品牌互聯(lián)網(wǎng)化提供全面的解決方案。

讀、寫文件:
    from openpyxl import Workbook
    from openpyxl import load_workbook
    from openpyxl.writer.excel import ExcelWriter

    workBook=load_workbook('/路徑/文件名.xlsx')
    sheetNames=workBook.sheetnames                    #獲取工作簿所有工作表名稱,返回列表
    sheet1=myWorkbook.get_sheet_by_name('Sheet1')     #獲取myWorkbook的表單Sheet1
    sheet1.cell(i,j).value                            #獲取i行,j列單元格的值,注意:此時單元格索引有變,從1開始
    sheet1['C3']='content'                            #為C3單元格寫入值,注意:此時單元格索引有變,分別從A,1開始 
    sheet1.cell(i,j).value  = 'values'

三、python封裝類來讀寫 excel 文件

在這里我封裝了一個類,方便以后使用

from openpyxl import Workbook                   #導(dǎo)入openpyxl模塊的workbook模塊,用于寫入.xlsx
from openpyxl import load_workbook
from openpyxl.writer.excel import ExcelWriter

封裝類: class saveExcelData(object):         # 定義類(用于封裝函數(shù),方便以后使用)
        def __init__(self,dataList,sheetTitle,fileName):#定義構(gòu)造函數(shù)分別傳入數(shù)據(jù),工作表標(biāo)題,保存文件名稱
            self.dataList=dataList
            self.sheetTitle=sheetTitle
            self.fileName=fileName
        def saveData(self):                  # 定義保存操作
            workbook = Workbook()            # 1、新建一個工作簿,實例化對象
            sheet = workbook.active          # 2、激活一個工作表
            sheet.title = self.sheetTitle    # 3、給激活的工作表命名
            for i in self.dataList:          # dataList傳入的應(yīng)為iterable元素組成的iterable容器類型
                sheet.append(i)
            workbook.save(self.fileName)
使用類:
from day12_csv_xls.save_class_excel import SavaExcelData
#     (上層文件夾)     (文件名)           (文件名里的類名)

data = list(range(20))
new_data = []
for i in range(4):
    new_data.append(data[len(data)//4*i:len(data)//4*(i+1)])
    #寫入數(shù)據(jù)順序為 data[0:4],data[5:10],data[10:15],data[15:20]
    print(len(new_data))
new1 = SavaExcelData(new_data, 'new_title', 'new_file.xlsx')
new1.saveData()

四、綜合練習(xí)

對Excel表中的行進行篩選并排序,(依照其中一列的數(shù)據(jù)對每行進行排序)寫入到新表單中

方法1:
import  xlrd
import xlwt

old_wbk = xlrd.open_workbook("rank.xlsx")
rank = old_wbk.sheets()[0]
nrows = rank.nrows                      #獲取工作表數(shù)據(jù)的行數(shù)

filterData = []                         #保存篩選后的數(shù)據(jù)
for row in range(nrows):
    myRowValue = rank.row_values(row)   #從表中獲取行數(shù)據(jù)
    if row is 0 or myRowValue[2]>5.0:   #判斷行數(shù)據(jù),如果是第一行表頭或者是points分?jǐn)?shù)大于5.0的數(shù)據(jù)行保留
        filterData.append(myRowValue)

headers = filterData[0]                 #獲取表頭并寫入到新的Excel表中
new_wbk = xlwt.Workbook()               #創(chuàng)建一個新的工作簿
new_rank = new_wbk.add_sheet("new_rank")#添加表單

for col in range(len(headers)):
    new_rank.write(0,col,headers[col])
del filterData[0]                      #將表頭從filterData中刪除
points = []                            #將points從篩選后的數(shù)據(jù)中分離出來

for item in filterData:
    points.append(item[2])
points.sort(reverse=True)              #對分?jǐn)?shù)進行排序

resutl = []  #存放最終排序后的結(jié)果
#將篩選后的數(shù)據(jù)與排序后的分?jǐn)?shù)進行比較,依次添加到新的列表中

for point inpoints:
    for row in filterData:
        if row[2] == point:
            resutl.append(row)
print(resutl)
for row in range(0,len(resutl)):
    for col in range(len(headers)):
        new_rank.write(row+1,col,resutl[row][col])
new_wbk.save("new_rank.xls")
方法2--通用方法
import xlrd
import xlwt
wb=xlrd.open_workbook("./素材/two/rank.xlsx")
mysheet=wb.sheet_by_index(0)
nrows=mysheet.nrows                      #獲取所有的行數(shù)
# print(nrows)

all_data=[]
for i in range(nrows):
    row_values=mysheet.row_values(i)     #將所有數(shù)據(jù)根據(jù)條件points>5帥選后保存
    # print(row_values[-1])
    if i>0 and row_values[-1] > 5:
        all_data.append(row_values)
    elif i==0:                           #跳過表頭
        all_data.append(row_values)
    else:
        continue
# print(all_data)                        #讀取數(shù)據(jù)
head=all_data[:1]
data=all_data[1:]
for i in range(len(data)):
    for j in range(i):
        if data[i][-1]>data[j][-1]:      #對某行的指定列value值進行對比
            data[i],data[j]=data[j],data[i]
print(data)                              #排序后
wb=xlwt.Workbook()
new_sheet=wb.add_sheet("rank")
for i in range(len(head)):
    new_sheet.write(0,i,head[i])
for j in range(len(data)):
    for k in range(len(data[j])):
        new_sheet.write(j+1, k, data[j][k]) #寫入新表單(更新)
wb.save("output.xls")

當(dāng)前文章:pyhton——csv/excel數(shù)據(jù)持久化
本文來源:http://bm7419.com/article32/jdiosc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護、用戶體驗品牌網(wǎng)站制作、外貿(mào)建站、電子商務(wù)、小程序開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化