用于列出 Azure Databricks 中每个子目录中的文件的 Python 代码

Posted

技术标签:

【中文标题】用于列出 Azure Databricks 中每个子目录中的文件的 Python 代码【英文标题】:Python code to list files in each sub directory in Azure Databricks 【发布时间】:2021-09-27 15:04:04 【问题描述】:

我正在尝试列出目录中存在的每个子目录中的文件、列数、列名,

Directory : dbfs:/mnt/adls/ib/har/
Sub Directory    2021-01-01
File                A.csv
File                B.csv
Sub Directory    2021-01-02
File                A1.csv
File                B1.csv

使用下面的代码,我收到错误“PosixPath”对象在第二个 for 循环中不可迭代。有人可以帮帮我吗?

files = dbutils.fs.ls(f"dbfs:/mnt/adls/ib/har/")
for fi in files: 
  il=fi.path
  print(il)
  ill=Path(il)
  for fii in ill:
    if(".csv" in fii.path):
      df2 = spark.read.option("header","true").option("sep", ";").option("escape", "\"").csv(f"fii.path")
      m = df2.columns
      l = len(df2.columns)
      print(f"fii.path has, l columns, m")
      cols[fii.path] = l

maxkey = max(cols, key=cols.get)
maxvalue = cols.get(maxkey)

【问题讨论】:

【参考方案1】:

请尝试以下代码。更新了完整的逻辑

def get_dir_content(ls_path):
    for dir_path in dbutils.fs.ls(ls_path):
        if dir_path.isFile():
            yield dir_path.path
        elif dir_path.isDir() and ls_path != dir_path.path:
            yield from get_dir_content(dir_path.path)
    
my_list =list(get_dir_content('mnt/acct_vw'))
matchers = ['.csv']
matching = [s for s in my_list if any(xs in s for xs in matchers)]
print(matching)

【讨论】:

嗨 Karthikeyan,这仅显示日期文件夹,但不显示日期文件夹中存在的 csv 文件 嗨,拉姆,我已经用完整的逻辑更新了答案。 @拉姆

以上是关于用于列出 Azure Databricks 中每个子目录中的文件的 Python 代码的主要内容,如果未能解决你的问题,请参考以下文章

Azure - 为存储容器中的每个新 blob 触发 Databricks 笔记本

如何列出 Azure Databricks 中的所有挂载点?

如何从 Azure Databricks 在 Azure Blob 中创建一个空文件夹

如何在 databricks 工作区中使用 python 获取 azure datalake 存储中存在的每个文件的最后修改时间?

Azure Databricks 在 Blob 存储上打开文件时出现问题

用于在 Azure 中列出非托管磁盘的 Foreach 循环