用通配符指定文件名集-glob

在计算机编程中,glob 模式用通配符指定文件名集。

我正在使用pyspark,我想用一种表达方式来读取文件名集合。假设目录/dir1/dir2/下有2020年和2021年全部的数据,每天的数据放在该天目录下,即2021年7月1日的数据放在20210701目录下,如果我想读取2021年全部的文件,只需以下代码

spark.read.load("/dir1/dir2/2021*")

但如果我只想读取2月份和3月份的所有数据呢?

开始我的思路是用正则表达式表示,但python中我对正则表达式一窍不通,然后我去学了python的正则表达式相关知识,学的时候我知道应该不是这么回事,解决不了我的问题,但正则表达式挺有趣的,所以我学完了嘿嘿嘿,然后写了篇python正则表达式入门_Jimmy and Zoey-CSDN博客

言归正传,我还是不知道如何读取我想指定的文件名集。然后查阅资料,我发现了glob!!!这才是我想要的。wiki中对glob介绍的第一句为“在计算机编程中,glob 模式用通配符指定文件名集”。

常用语法包括:

  1. * 匹配任意长度的字符,包括空字符
  2. ? 匹配任意一个字符
  3. [abc]匹配任意一个方括号里的字符
  4. [a-z]匹配任意一个小写字母

所以解答上面的问题,如果我只想读取2月份和3月份的所有数据,只需写

spark.read.load("/dir1/dir2/20210[23]*")

在类unix系统中,[…]还有两种额外语法

  1. [!abc]匹配任意一个不在方括号中的字符
  2. [!a-z]匹配任意一个不是小写字母的字符

这个在pyspark中亲测可行。毕竟确实是运行在linux上的。

在sql中,glob语法中的?和*都有等价的匹配,如?在sql中是_,*在sql中是%。但[…]却没有没有等价的匹配。SQL 的许多实现都扩展了 LIKE 运算符以允许更丰富的模式匹配语言,包括字符范围 ([…])、它们的否定和正则表达式的元素。

最后再抛出一个问题,如果我要读取1-11月份的所有数据呢?????

参考文献

glob (programming)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值