簡體   English   中英

Python-正則表達式從HDFS獲取目錄名稱

[英]Python - Regex to Get directory name from HDFS

我試圖從子過程命令的結果中提取文件夾名稱。 結果為找到1個項目

drwxr-xr-x   - user user          0 2017-05-04 17:19 /user/oozie/share/lib/lib_20170406204755

我想提取lib_20170406204755 我能夠使用

process = subprocess.check_output(['hdfs','dfs','-ls','/user/oozie/share/lib'])
print process.split(' ')[-1].rstrip().split('/')[-1]

該文件夾始終為lib_timestamp

如何使用正則表達式執行此操作?

這里不需要正則表達式,您也可以使用split()

string = "drwxr-xr-x   - user user          0 2017-05-04 17:19 /user/oozie/share/lib/lib_20170406204755"

folder = string.split('/')[-1]
print(folder)
# lib_20170406204755

但是,如果您堅持:

[^/]+$


Python

 import re string = "drwxr-xr-x - user user 0 2017-05-04 17:19 /user/oozie/share/lib/lib_20170406204755" rx = re.compile(r'[^/]+$') folder = rx.search(string).group(0) print(folder) # lib_20170406204755 

參見regex101.com上的演示

這應該可以解決問題:

(?!/)(lib_\\d*)

此正則表達式正在搜索以lib_開頭且后跟一堆數字的內容,如果在結果上未找到類似的文件夾,則該內容就足夠了。

(?!/)只是為了確保該文件夾前面有一個/

一種干凈的方法是使用os.path模塊挑選路徑。

import os
import subprocess

output = subprocess.check_output(['hdfs','dfs','-ls','/user/oozie/share/lib'])

# there are 8 columns in the output, i.e. we need a maximum of 7 splits per line
output_table = [line.split(maxsplit=7) for line in output.splitlines()]

# we are interested in the basename of that path
filenames = [os.path.basename(row[7]) for row in output_table]

使用此測試輸入:

drwxr-xr-x   - user user          0 2017-05-04 17:19 /user/oozie/share/lib/lib_20170406204755
drwxr-xr-x   - user user          0 2017-05-04 17:19 /user/oozie/share/lib/lib_20110523212454

文件名將為['lib_20170406204755', 'lib_20110523212454']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM