python 数据分析-读写数据csv、xlsx文件
1、讀寫csv文件可以使用基礎(chǔ)python實(shí)現(xiàn),或者使用csv模塊、pandas模塊實(shí)現(xiàn)。
基礎(chǔ)python讀寫csv文件
讀寫單個(gè)CSV
以下為通過基礎(chǔ)python讀取CSV文件的代碼,請(qǐng)注意,若字段中的值包含有","且該值沒有被引號(hào)括起來,則無法通過以下的簡單代碼獲取準(zhǔn)確的數(shù)據(jù)。
inputFile="要讀取的文件名" outputFile=“寫入數(shù)據(jù)的csv文件名” with open(inputFile,"r") as fileReader:with open(outputFile,"w") as fileWriter:for row in fileReader:fileWriter.write(row)讀取多個(gè)csv文件并寫入至一個(gè)csv文件
讀寫文件的代碼與讀寫單個(gè)csv文件大致相同,但需要利用glob模塊以及os模塊獲取需要讀取的文件名。代碼如下:
import os import glob inputPath="讀取csv文件的路徑" outputFile="寫入數(shù)據(jù)的csv文件名" firstFile=True for file in glob.glob(os.path.join(inputPath,"*.csv")):with open(file,'r') as fileReader:with open(outputFile,"a") as fileWriter:if firstFile:for row in fileReader:fileWriter.write(row)firstFile=FalsefileWriter.write("\n")else:header=fileReader.readline()for row in fileReader:fileWriter.write(row)通過pandas模塊讀寫csv文件
讀寫單個(gè)CSV
pandas的dataframe類型有相應(yīng)的方法能讀取csv文件,代碼如下:
import pandas as pd inputFile="要讀取的文件名" outputFile=“寫入數(shù)據(jù)的csv文件名” df=pd.read_csv(inputFile) df.to_csv(outputFile)請(qǐng)注意,若字段中的值包含有","且該值沒有被引號(hào)括起來,則無法通過以下的簡單代碼獲取準(zhǔn)確的數(shù)據(jù)。
讀取多個(gè)csv文件并寫入至一個(gè)csv文件
import os import glob import pandas as pd i nputPath="讀取csv文件的路徑" outputFile="寫入數(shù)據(jù)的csv文件名" dataFrameList=[] for file in glob.glob(os.path.join(inputPath,"*.csv")): df=pd.read_csv(file)dataFrameList.append(df) allDataFrame=pd.concat(dataFrameList,axis=0,ignore_index=True) allDataFrame.to_csv(outputFile)通過csv模塊讀寫csv文件
讀寫單個(gè)CSV文件
代碼如下:
import csv inputFile="要讀取的文件名" outputFile=“寫入數(shù)據(jù)的csv文件名” with open(inputFile,"r",newline='') as fileReader:with open(outputFile,"w",newline='') as fileWriter:csvReader=csv.reader(fileReader,delimiter=',')csvWriter=csv.writer(fileWriter,delimiter=',')for row in csvReader:print(row)csvWriter.writerow(row)讀取多個(gè)csv文件并寫入至一個(gè)csv文件
思路與上述用基礎(chǔ)python讀取多個(gè)csv文件大體相同,代碼如下:
import csv import glob import osinputPath=r"讀取csv文件的路徑" outputFile=r"輸出文件的路徑" firstFile=True for file in glob.glob(os.path.join(inputFile,"*.csv")):with open(file,"r") as fileReader:with open(outputFile,"a") as fileWriter:csvReader=csv.reader(fileReader)csvWriter=csv.writer(fileWriter)if firstFile:for row in csvReader:csvWriter(row)firstFile=Falseelse:header=next(csvReader,None)for row in csvReader:csvWriter(row)2.使用xlrd和xlwt這兩個(gè)模塊來讀取單個(gè)excel文件,
思路和讀取csv文件大致相同,分別設(shè)置輸入和輸出的excel文件對(duì)象,然后遍歷輸入對(duì)象的工作表的內(nèi)容并輸出至輸出對(duì)象的特定工作表。
代碼如下:
"""
基礎(chǔ)python獲取exel數(shù)據(jù)
"""
import xlrd
import xlwtinputExcel="輸入的excel文件"
outputExcel="輸出的excel文件"
outputWorkbook=xlwt.Workbook()
outputWorksheet=outputWorkbook.add_sheet("test")
with xlrd.open_workbook(inputExcel) as inputWorkbook:inputWorksheet=inputWorkbook.sheet_by_name("january_2013")for row in range(inputWorksheet.nrows):for col in range(inputWorksheet.ncols):outputWorksheet.write(row,col,inputWorksheet.cell_value(row,col))
outputWorkbook.save(outputExcel)
經(jīng)測(cè)試后,發(fā)現(xiàn)輸出的excek文件無法打開。
?
3、通過xlrd和xlwt模塊將讀取的多個(gè)excel文件中多個(gè)工作表輸出至多個(gè)excel文件中。
通過xlrd和xlwt讀多個(gè)excel文件并寫入一個(gè)新excel文件
獲取文件名可通過glob以及os模塊進(jìn)行,獲取一個(gè)excel文件中的多個(gè)工作表則通過xlrd.open_workbook()函數(shù)所打開的excel文件對(duì)象的sheets()進(jìn)行讀取,以下實(shí)例為讀取多個(gè)excel文件當(dāng)中的多個(gè)工作表,并將每個(gè)excel文件的全部內(nèi)容輸出至一個(gè)excel文件的不同工作表中,代碼如下:
import pandas as pd import glob import os import xlrd import xlwtinputPath=r"讀取excel文件的路徑" outputExcel=r"輸出的excel文件的具體路徑" outputWorkbook=xlwt.Workbook() #將讀入數(shù)據(jù)寫入變量中 for inputWorkbook in glob.glob(os.path.join(inputPath,"*.xlsx")):with xlrd.open_workbook(inputWorkbook) as workbook:workbookName=os.path.basename(inputWorkbook)firstSheetFlag=1 setRow=0for sheet in workbook.sheets():#為輸出工作表添加表頭if firstSheetFlag:outputWorksheet=outputWorkbook.add_sheet(workbookName)for cInd in range(sheet.ncols):outputWorksheet.write(0,cInd,sheet.cell_value(0,cInd))firstSheetFlag=0for rInd in range(1,sheet.nrows):for cInd in range(sheet.ncols):outputWorksheet.write(rInd+setRow,cInd,sheet.cell_value(rInd,cInd))setRow=setRow+sheet.nrows-1 outputWorkbook.save(outputExcel)請(qǐng)注意,上述代碼并未有對(duì)excel中的日期數(shù)據(jù)的格式進(jìn)行處理,故輸出至excel的日期字段的數(shù)據(jù)與實(shí)際看到的日期格式不同。
?
4、利用pandas讀寫多個(gè)excel文件,當(dāng)中涉及到讀寫excel文件的多個(gè)工作表。
大致原理如下:
glob.glob()以及os.path.join()函數(shù)負(fù)責(zé)獲取輸入要讀取的excel文件的具體路徑。
pandas的read_excel函數(shù)負(fù)責(zé)讀取函數(shù),通過當(dāng)中的sheet_name參數(shù)控制讀取excel工作表。當(dāng)讀取一個(gè)工作表時(shí),返回一個(gè)DataFrame;若讀取多個(gè)或全部excel工作表,則返回一個(gè)字典,鍵、值分別為工作表文件名和存放工作表數(shù)據(jù)的數(shù)據(jù)框。
pandas.DataFrame.to_csv()函數(shù)負(fù)責(zé)輸出數(shù)據(jù)至excel文件。當(dāng)中的excel_writer參數(shù)控制輸出路徑及excel文件名,sheet_name控制輸出的excel工作表。請(qǐng)注意,若指定的excel文件不存在,則新建一個(gè);若存在,則將數(shù)據(jù)以新工作表的形式寫入已存在的excel文件當(dāng)中。
接下來實(shí)例及相應(yīng)的代碼說明通過pandas讀寫exel文件。
案例:讀取多個(gè)excel文件當(dāng)中的所有工作表,將數(shù)據(jù)輸出至一個(gè)新excel文件,當(dāng)中的每個(gè)工作表為之前讀取的單個(gè)excel文件的所有數(shù)據(jù),工作表名為讀取的excel文件名,不包括后綴。
代碼:
?
總結(jié)
以上是生活随笔為你收集整理的python 数据分析-读写数据csv、xlsx文件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: fence机制 linux_Linux
- 下一篇: python面试题总结(一)字符串反转,