一、背景:
有一些大文件csv需要导入到云端,但是云端支持100MB以下的文件,导致一些超过限制的文件无法上传,就只能进行分为多个csv文件进行上传
二、实际项目:
1、引用:
import pandas as pd
from pathlib import Path
2、读取写入文件:
#转换数据类型
def num_out(data):
data = str(data)+'\t'
return data
if __name__ == '__main__':
res_file_path = Path(r"C:\Users\V1\Desktop\111111.csv") # 待分割文件路径
split_size = 100000 # 子文件行数最大值
tar_dir = res_file_path.parent / ("split_" + res_file_path.name.split(".")[0])
if not tar_dir.exists():
tar_dir.mkdir()
print("创建文件夹\t" + str(tar_dir))
print("目标路径:\t" + str(tar_dir))
print("分割文件:\t" + str(res_file_path))
print("分割大小:\t" + "{:,}".format(split_size))
tmp = pd.read_csv(res_file_path, nrows=10)
columns = tmp.columns.to_list()
idx = 0
while (len(tmp) > 0):
start = 1 + (idx * split_size)
tmp = pd.read_csv(res_file_path,
header=None,
names=columns,
skiprows=start,
nrows=split_size)
if len(tmp) <= 0:
break
data_1 = tmp['主订单编号'].map(num_out) #会出现科学计算法的列
file_name = res_file_path.name.split(".")[0] + "_{}_{}".format(start, start + len(tmp)) + ".csv"
file_path = tar_dir / file_name
tmp['主订单编号'] = data_1 #重新赋值到csv源文件当中
tmp.to_csv(file_path, index=False)
idx += 1
print(file_name + "\t保存成功")