我有一个包含如下条目的文件
foo: /mnt/scratch-8123/
bar: /mnt/scratch-1512/我希望能够在我的代码中编写如下路径:
<SCRATCH:foo>/results/stdout.txt这个想法是,用户可以引用其他用户的数据,而不必知道他们的数据位于何处,因为映射是由系统维护的。
识别这样的标记并提取标记的foo部分,以便文件路径的这一部分可以被/mnt/scratch-8123替换的最干净的方法是什么?我知道这可以通过正则表达式来完成,所以我基本上是在寻找最简单的方法来完成它……
发布于 2019-05-16 17:56:57
在这里,这提供了一个函数,它接受字符串和路径列表,您将希望删除路径上的尾部斜杠,以使事情变得更容易。
#!/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
"""))发布于 2019-05-16 18:04:31
我不确定这是否能很好地满足您的需要,但一种简单的方法是使用named placeholders格式化字符串。
如果您将文件解析为以下形式的dict
path_mapping = {'foo': '/mnt/scratch-8123', 'bar': '/mnt/scratch-1512'}请注意,我在这里删除了尾随的
/,以便在连接时不会出现两次
然后,您可以将字符串构造为
rel_path = '{foo}/results/stdout.txt'
abs_path = rel_path.format(**path_mapping)
# "/mnt/scratch-8123/results/stdout.txt"https://stackoverflow.com/questions/56165403
复制相似问题