pyspark 如何在Python变量中为.Zip类型文件指定通配符文件名

q0qdq0h2  于 2022-12-28  发布在  Spark
关注(0)|答案(1)|浏览(128)

我的要求是
我正在调用一个函数从.Zip文件中提取文件/文件夹

files_extract_with_structure(file_source, file_dest)

file_sourcefile_dest是我传递给上面函数的变量,file_source变量的值定义如下。

file_source = "/dbfs/mnt/devadls/pre/Source_Files/2022-10/767676.XXX.XXX.XXXX.20221010090858.txt.zip"

其中767676.XXX.XXX.XXXX.20221010090858.txt.zip是zip文件名
如果我像上面那样传递file_source变量值(硬编码zip文件名),上面的函数就可以正常工作
我的要求是代替硬编码的压缩文件名,我们可以指定通配符文件名如下?

file_source = "/dbfs/mnt/devadls/pre/Source_Files/2022-10/767676.XXX.XXX.XXXX.*.txt.zip"

因为下个月我会收到不同日期的相同文件等等...
但是,当我将通配符名称指定为"767676.XXX.XXX.XXXX.*.txt.zip"时,它会抛出一个“No such file or directory”错误。
请帮助解决这个问题。谢谢。

eyh26e7m

eyh26e7m1#

您可以使用标准库中的fnmatch模块,它将允许您基于类Unix规则过滤和匹配文件名。
对于您的示例,应该可以执行以下操作:

from fnmatch import fnmatch

file_source = "/dbfs/mnt/devadls/pre/Source_Files/2022-10/767676.XXX.XXX.XXXX.20221010090858.txt.zip"
pattern = "/dbfs/mnt/devadls/pre/Source_Files/2022-10/767676.XXX.XXX.XXXX.*.txt.zip"

if fnmatch(file_source, pattern):
    files_extract_with_structure(file_source, file_dest)
else:
    print("No file found")

下一步可能是列出源目录中的文件,并根据模式对每个文件进行测试。
希望这会有帮助!

相关问题