【问题标题】:Select files between specified range with regex使用正则表达式在指定范围内选择文件
【发布时间】:2019-06-29 02:09:25
【问题描述】:

我有一个包含 100 个文件夹的文件夹,命名如下:

parent_folder/05/01/
parent_folder/05/02/
parent_folder/05/03/
parent_folder/05/04/
...
parent_folder/05/29/
parent_folder/05/30/

如何使用正则表达式指定一个路径,该路径将仅选择文件夹的内容 01 to 10,然后是 11 to 20,最后是 21 to 30

我在努力

"parent_folder/05/[1-10]*/*"

但它也会选择 11、12、... 一直到 19。

编辑:我想每隔 10 天在 pyspark 中读取一个大型数据集,但到目前为止,所有建议的答案似乎都失败了。

【问题讨论】:

  • 当您说“选择”时,您需要对这些路径做什么?选择的路径是否需要传递给另一个程序?
  • 我正在阅读一个庞大的数据库,我想在 pyspark 中分部分阅读。
  • [1-10] 无法按预期工作,因为正则表达式不会将“10”视为数字“十”。
  • 你使用什么样的正则表达式? (perl、sed、grep、find)我认为您应该提供有关您想要什么以及如何实现选择的更多信息。
  • 请尝试类似:"parent_folder/05/"{01..10}.

标签: regex pyspark filepath


【解决方案1】:

如果您希望将“10”与您的 01...09 集合分组,您将使用如下内容:

parent_folder\/05\/(0[1-9]|10)\/

那么,对于你的 10...20 组,

parent_folder\/05\/(1[1-9]|20)\/

等等。

您可以通过以下链接尝试这些正则表达式:https://regex101.com/r/cXAYbS/2

在python中,你需要:

regex = r"parent_folder\/05\/(1[1-9]|20)\/"

上面的链接有一个“python”生成器,你可以在其中借用一些代码:

https://regex101.com/r/cXAYbS/2/codegen?language=python

【讨论】:

  • 嗯,Spark 抛出一个:java.io.IOException:非法文件模式:索引 1 附近缺少转义字符。而且文件路径中确实需要正则表达式。
  • 只需将其调整为您的正则表达式风格:"parent_folder/05/(0[1-9]|10)*/*"。如果您发布您的实际命令会有所帮助。
  • 我对使用正则表达式的 bash 了解不多,但有些解析器并不要求您转义 /。尝试删除所有 \ 实例。
【解决方案2】:

这个怎么样:

parent_folder/05/(?:0[1-9]|10)/

'?:' 用于非捕获组。

【讨论】:

  • 哦,我的回答迟了:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-11
  • 1970-01-01
相关资源
最近更新 更多