如何用Pandas生成无末尾空行的CSV并上传至GCS?
Pandas生成CSV末尾空行的解决办法
你当前用分块写入GCS的方式,每个pd.to_csv执行后都会在文件末尾添加换行符,最终导致最后多一行空行。下面给几个实用的解决思路:
1. 精准控制to_csv的写入模式与行终止符
通过标记首块和后续块的写入模式,同时控制行终止符,避免重复添加换行:
first_write = True gcs_path = "gs://your-bucket/your-target-file.csv" for chunk in pd.read_csv(path, chunksize=chunk_size, names=columnas, sep=';', low_memory=False, dtype=dtype): # 首块用写入模式,后续用追加模式 write_mode = 'w' if first_write else 'a' chunk.to_csv(gcs_path, index=False, sep=';', header=False, mode=write_mode, line_terminator='\n') first_write = False contador +=1
2. 用csv模块替代to_csv做写入(最可靠)
直接借助Python标准库的csv.writer来写入,能完全控制换行逻辑,不会产生多余空行:
import csv from google.cloud import storage client = storage.Client() bucket = client.get_bucket("your-bucket-name") target_blob = bucket.blob("your-target-file.csv") # 以文本模式打开GCS对象进行写入 with target_blob.open('w') as f: writer = csv.writer(f, delimiter=';') for chunk in pd.read_csv(path, chunksize=chunk_size, names=columnas, sep=';', low_memory=False, dtype=dtype): # 将DataFrame chunk转为列表后写入 writer.writerows(chunk.values.tolist()) contador +=1
3. 写入后去除末尾空行(适合小文件)
如果文件体积不大,可以写完后重新读取内容,去掉末尾的换行再重新上传:
# 先完成分块写入 gcs_path = "gs://your-bucket/temp-file.csv" for chunk in pd.read_csv(path, chunksize=chunk_size, names=columnas, sep=';', low_memory=False, dtype=dtype): chunk.to_csv(gcs_path, index=False, sep=';', header=False, mode='a') contador +=1 # 处理末尾空行 from google.cloud import storage client = storage.Client() bucket = client.get_bucket("your-bucket-name") blob = bucket.blob(gcs_path) # 下载文件内容并去除末尾换行 content = blob.download_as_text() clean_content = content.rstrip('\n') # 重新上传清理后的内容 blob.upload_from_string(clean_content)
内容的提问来源于stack exchange,提问作者Pythoncode2022
相关产品推荐
相关产品推荐

