python - 迭代目录中的文件并使用文件名作为变量,并将文件路径分配给变量

标签 python pyspark databricks directory-structure azure-databricks

我试图使用 Pyspark 迭代文件夹并获取 DataBricks 中的文件名和这些文件的路径。 突然想到我们是否可以将文件名作为变量并将路径分配给相应的名为变量的文件。 我们可以使用 dbutils 创建小部件并将文件名指定为参数,以使事情变得更容易。 因此,我致力于这个过程,直到获得文件和文件名的路径。 但我无法弄清楚变量的创建以及在各个文件名变量中分配各个文件的路径 代码如下:

import pandas as pd
import os
list1 =[]
list2 =[]
directory='/dbfs/FileStore/tables'
dir='/FileStore/tables'
for filename in os.listdir(directory):
  if filename.endswith(".csv") or filename.endswith(".txt"):
    file_path=os.path.join(dir, filename)
    print(file_path)
    print(filename)
    list1.append(file_path)
    list2.append(filename)

提前致谢

最佳答案

如果您打算使用文件名将路径分配给变量,那么您可以尝试:

...
for filename in os.listdir(directory):
  if filename.endswith(".csv") or filename.endswith(".txt"):
    file_path=os.path.join(dir, filename)
    print(file_path)
    print(filename)
    exec("%s = '%s'" % (filename, file_path))

请注意附加的引号以避免语法和名称错误。然而,这个解决方案仍然充满问题。例如,对 exec 的调用将文件路径中的反斜杠视为 unicode:

filename = 'file1'
filepath = '\maindir\foo'
exec("%s = '%s'" % (filename, filepath))
file1
'\\maindir\x0coo'

但是字典似乎更适合他的情况:

...
filenames_and_paths = {}
for filename in os.listdir(directory):
  if filename.endswith(".csv") or filename.endswith(".txt"):
    file_path=os.path.join(dir, filename)
    print(file_path)
    print(filename)
    filenames_and_paths[filename] = file_path

不确定为什么您为名称和路径创建了两个列表,但如果需要它们,您也可以使用字典理解:

filenames_and_paths = {name:path for name,path in zip(list1, list2)}

关于python - 迭代目录中的文件并使用文件名作为变量,并将文件路径分配给变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59597634/

相关文章:

python - 有效的日期范围重叠计算?

python - 更新pandas中特定行范围内的列值

python - 我可以在没有根记录器的情况下拥有logging.ini 文件吗?

sql - pyspark 中特定列的每个值始终为 NULL 的列类别

python - Spark 创建数据帧,其中包含整数和 float 混合的列

azure - pyspark从所有列的数据中删除控制字符的最佳方法

apache-spark - Apache Spark + Delta Lake 概念

python - 超过python中列表的大小

apache-spark - 如果 Spark 中每个组满足特定条件,则向列添加值

azure - 使用 ADF 将数据传输到 Databricks 表期间的数据类型转换为字符串