首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python模板匹配

Python模板匹配
EN

Stack Overflow用户
提问于 2019-05-16 17:35:18
回答 2查看 23关注 0票数 0

我有一个包含如下条目的文件

代码语言:javascript
复制
foo: /mnt/scratch-8123/
bar: /mnt/scratch-1512/

我希望能够在我的代码中编写如下路径:

代码语言:javascript
复制
<SCRATCH:foo>/results/stdout.txt

这个想法是,用户可以引用其他用户的数据,而不必知道他们的数据位于何处,因为映射是由系统维护的。

识别这样的标记并提取标记的foo部分,以便文件路径的这一部分可以被/mnt/scratch-8123替换的最干净的方法是什么?我知道这可以通过正则表达式来完成,所以我基本上是在寻找最简单的方法来完成它……

EN

回答 2

Stack Overflow用户

发布于 2019-05-16 17:56:57

在这里,这提供了一个函数,它接受字符串和路径列表,您将希望删除路径上的尾部斜杠,以使事情变得更容易。

代码语言:javascript
复制
#!/usr/bin/env python3
import re
def parse(string, paths):
    needed_path = re.findall(r'<SCRATCH:(.*)>', string)[0]
    found_path = re.findall(needed_path+r': (.*)', paths, flags=re.MULTILINE)[0]
    return re.sub(r'<SCRATCH:(.*)>', found_path, string)

print(parse("<SCRATCH:foo>/results/stdout.txt", """
foo: /mnt/scratch-8123
bar: /mnt/scratch-1512
"""))
票数 0
EN

Stack Overflow用户

发布于 2019-05-16 18:04:31

我不确定这是否能很好地满足您的需要,但一种简单的方法是使用named placeholders格式化字符串。

如果您将文件解析为以下形式的dict

代码语言:javascript
复制
path_mapping = {'foo': '/mnt/scratch-8123', 'bar': '/mnt/scratch-1512'}

请注意,我在这里删除了尾随的/,以便在连接时不会出现两次

然后,您可以将字符串构造为

代码语言:javascript
复制
rel_path = '{foo}/results/stdout.txt'
abs_path = rel_path.format(**path_mapping)
# "/mnt/scratch-8123/results/stdout.txt"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56165403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档