提问人:Just Me 提问时间:11/5/2023 最后编辑:VPfBJust Me 更新时间:11/6/2023 访问量:50
在 Python 中从字符串创建目录名称
create a directory name from a string in python
问:
将描述性字符串转换为可移植目录名称的最惯用、最干净的方法是什么?
类似的东西,但这也删除/替换了标点符号和其他空格,也许还有其他我没有想到的边缘情况。description.replace(" ", "_")
映射可能是有损的(你不需要能够重现原始字符串),它只需要是给定描述的合理近似值,当然 - 如果某处有一个标准实现,那将是一个很大的好处
谢谢!
例:"I'm thinking Avocado toast" -> "im_thinking_avocado_toast"
答:
0赞
Just Me
11/5/2023
#1
这个答案解释了如何用一个字符替换所有非字母数字字符,我想这已经足够了:
re.sub('[^0-9a-zA-Z]+', '_', description).lower()
In [6]: re.sub('[^0-9a-zA-Z]+', '_', "I'm thinking Avocado toast").lower()
Out[6]: 'i_m_thinking_avocado_toast'
0赞
Bibhav
11/5/2023
#2
逐步进行所有更改。对于这种情况,我建议使用正则表达式。
import re
description = "I'm thinking Avocado toast!"
cleaned_description = re.sub(r'[^\w\s]', '', description)
cleaned_description = re.sub(r'\s+', '_', cleaned_description).lower()
print(cleaned_description)
0赞
gimix
11/6/2023
#3
为了获得最大的灵活性,您可以使用 构建一个转换表,并将其与 一起使用。假设您想将某些字符转换为下划线,将某些字符转换为连字符,而忽略其他一些字符。这就像这个(诚然相当愚蠢)的例子一样简单str.maketrans
str.translate
trans = str.maketrans(" .()", "__--", "'/*")
"I'm thinking (Avocado) toast".translate(trans)
'Im_thinking_-Avocado-_toast'
0赞
Anton Norman
11/6/2023
#4
我能看到的最简单的解决方案,仅使用香草蟒蛇是这样的:
str = "I am thinking about Avocado Toast"
str_list = str.lower().split()
new_str = ""
for index, item in enumerate(str_list):
new_str += item
if index != len(str_list) - 1:
new_str += "_"
这样做只是简单地在空白处拆分字符串,将其部分放在列表中,然后从其部分构造一个新字符串。in the loop 是检查是否已经到达终点,在这种情况下,不添加下线整体。if statement
评论