You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Jupyter Notebook中读取GCS的txt文件并合并转为CSV

问题根因

list_blobs()接口仅返回GCS存储桶内的对象元数据引用,即你看到的<Blob: sleep-accel, xxx, xxx>格式输出,不会自动拉取文件的实际内容,需要调用Blob实例自带的下载方法才能获取txt文件内的真实数据,后续按数据结构解析合并即可输出目标CSV。

实现逻辑
  • 遍历prefix匹配的Blob列表时,过滤掉空目录占位项、非txt格式的无效对象
  • 对每个有效txt文件,调用下载接口拉取文本内容,按sleep-accel数据集motion文件的空格分隔格式解析结构化数据
  • 可选补充受试者ID字段(从文件名提取),方便后续数据分析时溯源
  • 批量合并所有结构化数据,输出为标准CSV格式,支持直接存到Notebook本地或回写至GCS
可直接运行的代码
from google.cloud import storage
import pandas as pd
from io import StringIO

# 初始化GCS客户端
client = storage.Client()
BUCKET_NAME = 'sleep-accel'
MOTION_FILE_PREFIX = 'physionet.org/files/sleep-accel/1.0.0/motion/'
bucket = client.get_bucket(BUCKET_NAME)

all_records = []

for blob in bucket.list_blobs(prefix=MOTION_FILE_PREFIX):
    # 跳过空目录、非txt文件
    if blob.name.endswith('/') or not blob.name.endswith('.txt'):
        continue
    # 从文件名提取受试者ID,例:1455390_acceleration.txt 提取ID为1455390
    subject_id = blob.name.split('/')[-1].split('_')[0]
    # 下载txt文本内容,该数据集motion文件为UTF-8编码、空格分隔、无表头
    file_content = blob.download_as_text(encoding='utf-8')
    # 解析为结构化表,列对应:时间戳、X轴加速度、Y轴加速度、Z轴加速度
    single_df = pd.read_csv(
        StringIO(file_content),
        sep='\s+',
        header=None,
        names=['timestamp', 'acc_x', 'acc_y', 'acc_z']
    )
    single_df['subject_id'] = subject_id
    all_records.append(single_df)

# 合并所有文件数据
merged_df = pd.concat(all_records, ignore_index=True)

# 结果验证:打印前5行
print(merged_df.head())
# 保存为CSV到Notebook本地路径
merged_df.to_csv('merged_sleep_accel_motion.csv', index=False, encoding='utf-8')

# 若需要把合并后的CSV回写到GCS,取消注释以下代码即可
# target_blob = bucket.blob('merged_result/merged_sleep_accel_motion.csv')
# target_blob.upload_from_string(
#     merged_df.to_csv(index=False, encoding='utf-8'),
#     content_type='text/csv'
# )
注意事项
  • 提前确认Notebook绑定的GCP服务账号拥有目标存储桶的storage.objects.get、(如需回写则加storage.objects.create)权限,否则会触发权限报错
  • 如果motion目录下文件总大小超过Notebook实例的可用内存,不要一次性把所有文件加载到内存,可改为逐文件解析、逐行写入CSV的流式处理逻辑,避免内存溢出
  • 该数据集motion目录下的txt无表头、用不定长空格分隔字段,代码已适配该格式;如果后续需要合并睡眠标签、心率等其他目录的文件,对应调整分隔符、列名配置即可

内容的提问来源于stack exchange,提问作者dev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 16:15:10