1、读写csv文件可以使用基础python实现,或者使用csv模块、pandas模块实现。
基础python读写csv文件
读写单个CSV
以下为通过基础python读取CSV文件的代码,请注意,若字段中的值包含有","且该值没有被引号括起来,则无法通过以下的简单代码获取准确的数据。
inputFile="要读取的文件名"
outputFile=“写入数据的csv文件名”
with open(inputFile,"r") as fileReader:with open(outputFile,"w") as fileWriter:for row in fileReader:fileWriter.write(row)
读取多个csv文件并写入至一个csv文件
读写文件的代码与读写单个csv文件大致相同,但需要利用glob模块以及os模块获取需要读取的文件名。代码如下:
import os
import glob
inputPath="读取csv文件的路径"
outputFile="写入数据的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文件
读写单个CSV
pandas的dataframe类型有相应的方法能读取csv文件,代码如下:
import pandas as pd
inputFile="要读取的文件名"
outputFile=“写入数据的csv文件名”
df=pd.read_csv(inputFile)
df.to_csv(outputFile)
请注意,若字段中的值包含有","且该值没有被引号括起来,则无法通过以下的简单代码获取准确的数据。
读取多个csv文件并写入至一个csv文件
import os
import glob
import pandas as pd
i
nputPath="读取csv文件的路径"
outputFile="写入数据的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文件
读写单个CSV文件
代码如下:
import csv
inputFile="要读取的文件名"
outputFile=“写入数据的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)
读取多个csv文件并写入至一个csv文件
思路与上述用基础python读取多个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这两个模块来读取单个excel文件,
思路和读取csv文件大致相同,分别设置输入和输出的excel文件对象,然后遍历输入对象的工作表的内容并输出至输出对象的特定工作表。
代码如下:
"""
基础python获取exel数据
"""
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)
经测试后,发现输出的excek文件无法打开。
3、通过xlrd和xlwt模块将读取的多个excel文件中多个工作表输出至多个excel文件中。
通过xlrd和xlwt读多个excel文件并写入一个新excel文件
获取文件名可通过glob以及os模块进行,获取一个excel文件中的多个工作表则通过xlrd.open_workbook()函数所打开的excel文件对象的sheets()进行读取,以下实例为读取多个excel文件当中的多个工作表,并将每个excel文件的全部内容输出至一个excel文件的不同工作表中,代码如下:
import pandas as pd
import glob
import os
import xlrd
import xlwtinputPath=r"读取excel文件的路径"
outputExcel=r"输出的excel文件的具体路径"
outputWorkbook=xlwt.Workbook()
#将读入数据写入变量中
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)
请注意,上述代码并未有对excel中的日期数据的格式进行处理,故输出至excel的日期字段的数据与实际看到的日期格式不同。
4、利用pandas读写多个excel文件,当中涉及到读写excel文件的多个工作表。
大致原理如下:
glob.glob()以及os.path.join()函数负责获取输入要读取的excel文件的具体路径。
pandas的read_excel函数负责读取函数,通过当中的sheet_name参数控制读取excel工作表。当读取一个工作表时,返回一个DataFrame;若读取多个或全部excel工作表,则返回一个字典,键、值分别为工作表文件名和存放工作表数据的数据框。
pandas.DataFrame.to_csv()函数负责输出数据至excel文件。当中的excel_writer参数控制输出路径及excel文件名,sheet_name控制输出的excel工作表。请注意,若指定的excel文件不存在,则新建一个;若存在,则将数据以新工作表的形式写入已存在的excel文件当中。
接下来实例及相应的代码说明通过pandas读写exel文件。
案例:读取多个excel文件当中的所有工作表,将数据输出至一个新excel文件,当中的每个工作表为之前读取的单个excel文件的所有数据,工作表名为读取的excel文件名,不包括后缀。
代码:
"""
通过pandas读写多个excel文件
"""import glob
import os
import pandas as pdinputPath="需要读入的excel文件路径"
outputWorkbook="excel输出文件"
inputWorkbook=glob.glob(os.path.join(inputPath,"*.xlsx"))
writer=pd.ExcelWriter(outputWorkbook)for workbook in inputWorkbook:allData=[]combineData=pd.DataFrame#读取excel文件allSheetData=pd.read_excel(workbook,sheet_name=None)for name,data in allSheetData.items():allData.append(data)combineData=pd.concat(allData,axis=0,ignore_index=True)#输出excel文件combineData.to_excel(writer,sheet_name=os.path.basename(workbook)[:-5],index=False)
writer.save()