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

如何使用PySpark/Databricks dbutils获取S3目录下的文件名列表

核心解决方法

dbutils.fs.ls(MYPATH)返回的结果是FileInfo对象列表,每个对象包含path(文件完整路径)、name(文件名)、size(文件大小,目录大小为0)三个属性,直接提取path字段即可构造你需要的fileList数组。


基础版本(仅处理当前目录下的文件,忽略子目录)

# 自定义参数配置
MYPATH = "你的S3桶相对路径"
jsonDir = "json文件存储目标路径"
otherDir = "非json文件存储目标路径"

# 构造fileList:提取当前目录下所有文件的完整路径
fileList = [file_info.path for file_info in dbutils.fs.ls(MYPATH) if file_info.size > 0]

# 提前创建目标目录避免移动报错
dbutils.fs.mkdirs(jsonDir)
dbutils.fs.mkdirs(otherDir)

# 文件分流移动逻辑
for file_path in fileList:
    if file_path.endswith(".json"):
        dbutils.fs.mv(file_path, jsonDir)
    else:
        dbutils.fs.mv(file_path, otherDir)

进阶版本(递归处理所有层级子目录下的文件)

如果需要遍历MYPATH下所有子目录的文件统一分流,使用递归方法获取全量文件路径即可:

# 自定义参数配置
MYPATH = "你的S3桶相对路径"
jsonDir = "json文件存储目标路径"
otherDir = "非json文件存储目标路径"

# 递归遍历所有目录获取文件路径
def get_all_file_paths(base_path):
    all_files = []
    for item in dbutils.fs.ls(base_path):
        if item.size > 0:
            all_files.append(item.path)
        else:
            all_files.extend(get_all_file_paths(item.path))
    return all_files

fileList = get_all_file_paths(MYPATH)

# 提前创建目标目录避免移动报错
dbutils.fs.mkdirs(jsonDir)
dbutils.fs.mkdirs(otherDir)

# 文件分流移动逻辑
for file_path in fileList:
    if file_path.endswith(".json"):
        dbutils.fs.mv(file_path, jsonDir)
    else:
        dbutils.fs.mv(file_path, otherDir)

注意:如果你的路径中存在名称带.json的目录,上述逻辑会自动过滤(因为目录size为0不会进入fileList),不会误移动。如果需要移动目录本身,去掉列表生成式中的if file_info.size > 0过滤条件即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:48:02