|
python切割大文件csv,分为多个小csv文件或转为Excel文件一、简介二、功能介绍三、项目1.环境要求1.python安装2.安装依赖2.代码1.切割csv文件(保存单文件数据量为1百万)2.csv文件转excel(保存单文件数据量为1百万)3.读取csv文件路径及保存目标文件的路径4.主程序3.测试截图注意事项一、简介在工作中,我们经常需要导出大量数据,但Excel表格只能支持大约100万行的数据量。对于超过这个限制的数据,我们只能导出为CSV文件。然而,CSV文件是纯文本格式,直接用Excel打开时,可能会出现数据失真问题,如乱码或数字过长导致的科学计数法显示。为了解决这些问题,本工具提供了将CSV文件拆分和转换为Excel文件的功能。二、功能介绍CSV文件拆分:将一个大的CSV文件拆分成多个小的CSV文件,每个文件包含不超过100万行的数据。(默认是超过100行数据拆分)CSV转Excel:将CSV文件转换为Excel文件,同时处理可能的乱码和科学计数法问题。三、项目1.环境要求Python3.xpandas库openpyxl库xlsxwriter库1.python安装python官网.进入python下载页面在下载页面可以看到很多不同版本的下载链接。其中,标记x86的为32位安装包,x86-64为64位安装包。对于Windows操作系统,可以下载“executableinstaller”。下载后进行安装,执行安装向导的时候,记得勾选“AddPython3.xtoPATH”选项,这个选项会帮助我们将Python的解释器添加到PATH环境变量中,如不勾选,需要自己配置环境变量参考安装教程python编辑工具推荐:pycharmpycharm官网2.安装依赖pipinstallpandasopenpyxlxlsxwritertkinterpyinstaller使用临时镜像下载pipinstallpandasopenpyxlxlsxwriter-ihttps://pypi.tuna.tsinghua.edu.cn/simplesome-package设置全局镜像pipconfigsetglobal.index-urlhttps://pypi.tuna.tsinghua.edu.cn/simplepipinstallpandasopenpyxlxlsxwritertkinterpyinstaller1234567892.代码1.切割csv文件(保存单文件数据量为1百万)importpandasaspdimportnumpyasnp#文件路径(读取,保存)importpathdefcsvToSplit():#需拆分的csv文件路径source_path='source_csv'#拆分后csv文件路径output_folder='data/split_csv'file_name,file_path=path.read_path(source_path)iffile_name==-1:raiseValueError(file_path)outfile_path=path.output_path(file_name,output_folder)#读取csv文件df=pd.read_csv(file_path)#保存单文件1百万数据size=1000000#size=100ifint(len(df)/size)==0:raiseValueError(f'该文件数据量未达到百万,无需拆分')res=divmod(len(df),size)num=res[0]#excel最大支持行数为1048576,当余数大于48576时分片数+1#判断余数大于0也是一样的ifres[1]>48576: num=num+1print(f'------csv文件拆分begin------')#单文件会查过百万(会平均分布的)fori,chunkinenumerate(np.array_split(df,len(df)/size)):chunk.to_csv(f'{outfile_path}/{file_name}_{i}.csv',index=False)print(f'------第{i}个csv文件生成成功------')print(f'------csv文件拆分end------')1234567891011121314151617181920212223242526272829303132333435363738392.csv文件转excel(保存单文件数据量为1百万)importpandasaspdimportnumpyasnp#文件路径(读取,保存)importpathdefcsvToExcel():#读取csv文件路径source_path='source_csv'#csv转换excel后保存文件路径output_folder='data/toExcel_xlsx'file_name,file_path=path.read_path(source_path)iffile_name==-1:raiseValueError(file_path)outfile_path=path.output_path(file_name,output_folder)#读取csv文件df=pd.read_csv(file_path)#保存单文件1百万数据size=1000000#如果文件小于1百万数据则直接转换为excel表格#如果文件大于1百万数据则进行拆分后再转换为excel表格print(f'------csv文件转换begin------')iflen(df)size:print(f'------csv文件数据大于1百万,先进行csv文件拆分------')res=divmod(len(df),size) num=res[0] #excel最大支持行数为1048576,当余数大于48576时分片数+1 #判断余数大于0也是一样的 ifres[1]>48576: num=num+1#单文件会查过百万(会平均分布的)fori,chunkinenumerate(np.array_split(df,len(df)/size)):#chunk.to_csv(f'{outfile_path}/{file_name}_{i}.csv',index=False)pd.DataFrame(chunk).to_excel(f'{outfile_path}/{file_name}_{i}.xlsx',index=False)print(f'------第{i}个csv文件转换成功------')print(f'------csv文件转换end------')1234567891011121314151617181920212223242526272829303132333435363738394041423.读取csv文件路径及保存目标文件的路径#读取csv文件路径#保存目标文件的路径importpandasaspdimportosfromdatetimeimportdatetime#读取文件路径defread_path(folder_path):#列出文件夹中所有csv文件csv_files=[fforfinos.listdir(folder_path)iff.endswith('.csv')]#文件夹中csv文件必须一个(暂支持一个文件)iflen(csv_files)>1:return-1,'文件夹中有多个csv文件,目前只支持一个csv文件!'files=csv_files[0]#获取文件名file_name=files.split('.',1)[0]file_path=os.path.join(folder_path,files)returnfile_name,file_path#保存文件路径defoutput_path(file_name,output_folder):#获取当前日期current_date=datetime.now()#将日期格式化为yyyymmdd格式formatted_date=current_date.strftime('%Y%m%d')#文件输出路径(以时间做区分)outfile_path=os.path.join(output_folder,file_name+'-'+formatted_date)#如果输出文件夹不存在,则创建ifnotos.path.exists(outfile_path)s.makedirs(outfile_path)returnoutfile_path1234567891011121314151617181920212223242526272829303132333435364.主程序#csv文件拆分importcsvToSplit#csv转excelimportcsvToExceldefmain(type):iftype==0:csvToSplit.csvToSplit()eliftype==1:csvToExcel.csvToExcel()if__name__=='__main__':try:num=int(input("请选择0:拆分csv;1:csv转excel:"))main(num)exceptValueErrorase:print("ERROR:"+e)123456789101112131415161718193.测试截图csv转excel成功后会在data/toExcel_xlsx中生成转换后的文件csv拆分csv文件未达到百万数据,会提示成功后会在data/split_csv中生成转换后的文件注意事项确保安装了所有必要的Python库。根据实际需要修改代码中的文件路径和参数(默认是百万)。如果直接使用需要在当前目录创建source_csv和data文件夹(即与main.py文件在同一目录下)
|
|