如何使用python正则表达式验证hdfs结果,以确定它是文件夹、文件还是非exis

2024-09-30 14:38:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个str,它是hdfs命令的结果,用于显示给定路径的文件夹、文件或不存在的路径,下面是一些示例:

stru文件:

-rw-rw----+  3 jdoe clouderausersdev   12267543 2018-02-05 16:41 hdfs://nameservice1/client/abc/part-00000-994917013a6a-c000.snappy.parquet

str_文件夹:

Found 3 items
-rw-rw----+  3 jdoe clouderausersdev          0 2018-02-05 16:41 hdfs://nameservice1/client/abc/_SUCCESS
-rw-rw----+  3 jdoe clouderausersdev   12267543 2018-02-05 16:41 hdfs://nameservice1/client/abc/part-00000-994917013a6a-c000.snappy.parquet
-rw-rw----+  3 jdoe clouderausersdev   12267543 2018-02-05 16:41 hdfs://nameservice1/client/abc/part-00001-994917013a6a-c000.snappy.parquet
-rw-rw----+  3 jdoe clouderausersdev   12267543 2018-02-05 16:41 hdfs://nameservice1/client/abc/part-00002-994917013a6a-c000.snappy.parquet

str_不存在:

ls: `hdfs://nameservice1/client/abc/part-00000.parqu': No such file or directory

现在我想知道正则表达式检查的结果,问题是:

import re

regex_folder = "Found [1-9]\d items"
regex_file = ".parquet"
regex_error = "No such file"

测试结果如下:

enter image description here

那么,我如何区分m和m1之间的区别呢?显然,m表示没有发现,而m1表示存在匹配

最后,我需要告诉三个场景:文件夹、文件、不存在

多谢各位

更新(根据ФццПццццццццццц1094

仍在工作:m1应显示匹配,而m不应显示匹配

enter image description here


Tags: 文件name文件夹clientservicehdfsrwabc
1条回答
网友
1楼 · 发布于 2024-09-30 14:38:02

您的正则表达式Found [1-9]\d items意味着您要搜索Found xy items,其中x是介于1和9之间的数字,y是介于0和9之间的数字。这是有问题的,我假设这不是您想要的。如果要匹配一个或多个数字,只需使用\d+。您可以使用online regex testers调试此类问题

第二个问题是字符串文本的误用。在Python中使用正则表达式时,应始终使用原始字符串文字,这些文字以字母“r”开头

  • 这是好的:re.search(r'regex \d here', ..
  • 这是坏的:re.search('regex \d here', ..

一旦你解决了这些问题,result = re.search(r'Found \d+ items', some_string)就会起作用。要检查是否存在任何匹配项,可以将结果与None进行比较。如果结果不是None,它将是一个match object。注意:当表达式的计算结果为“无”时,其结果为空,并且不会显示在解释器中

这是一个有效的演示:

import re

str1 = 'ffff'
str2 = 'Found 3 items ffff'
reg_folder = r'Found ([1-9]\d*) items'
if re.search(reg_folder, str1) is None:
    print('Nothing found in str1')

result = re.search(reg_folder, str2)
if result is not None:
    num = result[1]
    print('Found the number: {}'.format(num))
else:
    print('Nothing found in str2')

另外,请记住,正则表达式不擅长解析对人友好的消息,可能存在用于HDF的库,而不是解析原始输出

相关问题 更多 >