将回车符添加到存储在 GCS 存储桶中的 CSV 文件中的每一行

问题描述

我需要在 CSV 文件中的每一行末尾添加回车符,该文件可在 一个 GCS 桶。我想将修改后的数据存储在同一个 GCS 存储桶中的新文件中。我们观察到的是 虽然我们正在将数据写入新的 CSV 文件,但它会覆盖原始文件

以下是我用于该任务的代码片段。

有人可以帮助我了解如何在不更改原始文件中的数据的情况下实现这一点。

谢谢, 喜马拉雅

from google.cloud import storage
storage_client = storage.Client.from_service_account_json(r"C:\Users\XXXXX\Downloads\GCP-Key\XXXX.json")

bucket = storage_client.get_bucket('test-export-bucket-XXXX')
blob = bucket.blob('new/test_file.csv')
destination_blob = bucket.blob('test/modified_test_file.csv')
data = blob.download_as_string()

count = 0
for line in data.splitlines():
    count +=1
    print(line)
    newline = line.decode('utf8') + '\r\n'
    print(newline)
    destination_blob.upload_from_string(newline)

解决方法

首先,你的代码是错误的。你不能一行一行地写。如果这样做,新的写入会覆盖之前的写入,因此,最后,您将只存储最后一行。

相反,为转换后的文件创建一个缓冲区,并将其写入 FOR 循环之后(不在内部)。

那么,你覆盖原始文件是不正常的。你确定吗?目标 blob 明显不同,您不能像这样覆盖现有数据。

,

只是在这里说明@Guillaume 解释的内容,以防不清楚。请选择他的答案作为正确答案。

text_buffer = ""
for line in data.splitlines():
   text_buffer += line.decode('utf8') + '\r\n'
   
destination_blob.upload_from_string(text_buffer)