Python RE 目录和斜杠
Python RE Directories and slashes
假设我有一个字符串,它是已输入的根目录
'C:/Users/Me/'
然后我使用 os.listdir()
并加入它来创建子目录列表。
我最终得到如下所示的字符串列表:
'C:/Users/Me/Adir\Asubdir\'
等等。
我想拆分子目录并将每个目录名称捕获为它自己的元素。下面是一个尝试。我似乎对 \
和 /
字符有疑问。我假设 \
正在转义,所以 '[\/]'
对我来说说寻找 \
或 /
那么 '[\/]([\w\s]+)[\/]'
作为匹配模式应该寻找之间的任何单词两个斜线...但输出只有 ['/Users/']
并且没有其他匹配。所以我然后为正斜杠添加一个转义符。
'[\\/]([\w\s]+)[\\/]'
但是,我的输出然后只变成 ['Users','ADir']
,这让我感到困惑。
我的问题是如何使用 \
和 /
从字符串中标记每个目录,但也许为什么我的 RE 没有像我预期的那样工作?
最小示例:
import re, os
info = re.compile('[\\/]([\w ]+)[\\/]')
root = 'C:/Users/i12500198/Documents/Projects/'
def getFiles(wdir=os.getcwd()):
files = (os.path.join(wdir,file) for file in os.listdir(wdir)
if os.path.isfile(os.path.join(wdir,file)))
return list(files)
def getDirs(wdir=os.getcwd()):
dirs = (os.path.join(wdir,adir) for adir in os.listdir(wdir)
if os.path.isdir(os.path.join(wdir,adir)))
return list(dirs)
def walkSubdirs(root,below=[]):
subdirs = getDirs(root)
for aDir in subdirs:
below.append(aDir)
walkSubdirs(aDir,below)
return below
subdirs = walkSubdirs(root)
for aDir in subdirs:
files = getFiles(aDir)
for f in files:
finfo = info.findall(f)
print(f)
print(finfo)
I want to split the subdirectories and capture each directory name as its own element
我建议您使用 Python 的标准函数之一来解析文件系统路径,而不是正则表达式。
这是一个使用 pathlib
:
from pathlib import Path
p = Path("C:/Users/Me/ADir\ASub Dir x 2 Dir\")
p.parts
#=> ('C:\', 'Users', 'Me', 'ADir', 'ASub Dir\x02 x 2 Dir')
请注意 pathlib.Path
的行为取决于系统 运行 Python。由于我在 Linux 机器上,所以我实际上在这里使用了 pathlib.PureWindowsPath
。我相信输出对于 Windows.
上的那些人来说应该是准确的
假设我有一个字符串,它是已输入的根目录
'C:/Users/Me/'
然后我使用 os.listdir()
并加入它来创建子目录列表。
我最终得到如下所示的字符串列表:
'C:/Users/Me/Adir\Asubdir\'
等等。
我想拆分子目录并将每个目录名称捕获为它自己的元素。下面是一个尝试。我似乎对 \
和 /
字符有疑问。我假设 \
正在转义,所以 '[\/]'
对我来说说寻找 \
或 /
那么 '[\/]([\w\s]+)[\/]'
作为匹配模式应该寻找之间的任何单词两个斜线...但输出只有 ['/Users/']
并且没有其他匹配。所以我然后为正斜杠添加一个转义符。
'[\\/]([\w\s]+)[\\/]'
但是,我的输出然后只变成 ['Users','ADir']
,这让我感到困惑。
我的问题是如何使用 \
和 /
从字符串中标记每个目录,但也许为什么我的 RE 没有像我预期的那样工作?
最小示例:
import re, os
info = re.compile('[\\/]([\w ]+)[\\/]')
root = 'C:/Users/i12500198/Documents/Projects/'
def getFiles(wdir=os.getcwd()):
files = (os.path.join(wdir,file) for file in os.listdir(wdir)
if os.path.isfile(os.path.join(wdir,file)))
return list(files)
def getDirs(wdir=os.getcwd()):
dirs = (os.path.join(wdir,adir) for adir in os.listdir(wdir)
if os.path.isdir(os.path.join(wdir,adir)))
return list(dirs)
def walkSubdirs(root,below=[]):
subdirs = getDirs(root)
for aDir in subdirs:
below.append(aDir)
walkSubdirs(aDir,below)
return below
subdirs = walkSubdirs(root)
for aDir in subdirs:
files = getFiles(aDir)
for f in files:
finfo = info.findall(f)
print(f)
print(finfo)
I want to split the subdirectories and capture each directory name as its own element
我建议您使用 Python 的标准函数之一来解析文件系统路径,而不是正则表达式。
这是一个使用 pathlib
:
from pathlib import Path
p = Path("C:/Users/Me/ADir\ASub Dir x 2 Dir\")
p.parts
#=> ('C:\', 'Users', 'Me', 'ADir', 'ASub Dir\x02 x 2 Dir')
请注意 pathlib.Path
的行为取决于系统 运行 Python。由于我在 Linux 机器上,所以我实际上在这里使用了 pathlib.PureWindowsPath
。我相信输出对于 Windows.