应用场景是这样的,一个大CSV文件很大,需要拆开分给不同人处理,注解看代码,缺少包自己安装呢
import pandas as pd,os,math,zipfile,shutil
#原 CSV的路径
CSV_Path = '/Users/huangmengfeng/Downloads/lalala.csv'
#输出 文件的文件夹,确保文件夹存在
OUT_Dir = '/Users/huangmengfeng/Desktop/CSV_TO_XLSX'
#每个小文件的条数
Ad_Nums = 200
#如果文件夹不存在则创建文件夹
def makeDir(dir):
if not os.path.exists(dir):
os.mkdir(dir)
#压缩文件
def zip_ya(startdir,file_news):
z = zipfile.ZipFile(file_news,'w',zipfile.ZIP_DEFLATED) #参数一:文件夹名
for dirpath, dirnames, filenames in os.walk(startdir):
fpath = dirpath.replace(startdir,'') #这一句很重要,不replace的话,就从根目录开始复制
fpath = fpath and fpath + os.sep or ''#这句话理解我也点郁闷,实现当前文件夹以及包含的所有文件的压缩
for filename in filenames:
z.write(os.path.join(dirpath, filename),fpath+filename)
print ('压缩成功')
z.close()
#读取CSV
if __name__ == '__main__':
#愿路径的文件名
sourec_file_name = os.path.basename(CSV_Path)
#创建文件夹
makeDir(OUT_Dir)
Tmp_Out_Dir = OUT_Dir + '/tmp'
if os.path.exists(Tmp_Out_Dir):
shutil.rmtree(Tmp_Out_Dir)
makeDir(Tmp_Out_Dir)
#读取csv文件
dtype = {'dst_url': str, 'src_url': str}
csv_data_frame = pd.read_csv(CSV_Path,dtype=dtype) if sourec_file_name.endswith('.csv') else pd.read_excel(CSV_Path,dtype=dtype)
print(csv_data_frame.shape)
#获得总条数
total_nums = csv_data_frame.shape[0]
#获得总文件数
file_nums = math.ceil(total_nums/Ad_Nums)
#遍历csv 拆成小文件
tmp_data_arr = []
count_start = 0
count_end = Ad_Nums if file_nums > 1 else total_nums
tig_num = 0
for (index,row) in csv_data_frame.iterrows():
tmp_data_arr.append(row)
if index == count_end - 1 :
tmp_data_frame = pd.DataFrame(tmp_data_arr)
tmp_file_name = '{0}/{1}_{4}_{2}-{3}.xlsx'.format(Tmp_Out_Dir,sourec_file_name.split('.')[0],count_start,count_end-1,tig_num)
csv_write = pd.ExcelWriter(tmp_file_name,engine='xlsxwriter',options={'strings_to_urls':False})
tmp_data_frame.to_excel(csv_write, index=False)
csv_write.close()
tmp_data_arr = []
count_start += 200
count_end = count_end + 200 if count_end + 200 <= total_nums else total_nums
tig_num += 1
out_zip_path = '{0}/{1}.zip'.format(OUT_Dir,sourec_file_name.split('.')[0]) # 压缩后文件夹的名字
zip_ya(Tmp_Out_Dir,out_zip_path)
对了再附送一个将文件夹的文件合成一个大文件的脚本,不客气
import pandas as pd,os
#合成文件的路径
CSV_Path = '/Users/huangmengfeng/Desktop/lalala_out.csv'
#需要合成的文件的文件夹,确保文件夹存在
Source_Dir = '/Users/huangmengfeng/Desktop/CSV_TO_XLSX/tmp'
#读取CSV
if __name__ == '__main__':
tmp_file_name_arr = []
for file in os.listdir(Source_Dir):
if os.path.isfile(os.path.join(Source_Dir,file)) and file.endswith('.xlsx'):
tmp_file_name_arr.append(file)
tmp_file_name_arr.sort()
print(tmp_file_name_arr)
total_arr = []
for file in tmp_file_name_arr:
tmp_df = pd.read_excel(os.path.join(Source_Dir, file), dtype={'dst_url': str, 'src_url': str})
total_arr.append(tmp_df)
total_df = pd.concat(total_arr)
total_df.to_csv(CSV_Path,index=False)