我试图使用 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/