首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python string.replace()不替换字符

Python string.replace()不替换字符
EN

Stack Overflow用户
提问于 2010-08-19 14:57:17
回答 5查看 59K关注 0票数 15

一些背景信息:我们有一个古老的基于web的文档数据库系统,我在这里工作,几乎全部由带有“正常”扩展(.doc、.xls、.ppt)的MS文档组成。它们都是基于某种任意ID号(即1245.doc)命名的。我们切换到SharePoint,我需要重命名所有这些文件并将它们排序到文件夹中。我有一个包含各种信息的CSV文件(比如哪个ID号对应于哪个文档的标题),所以我使用它重命名这些文件。我编写了一个简短的Python脚本,它重命名ID编号标题。

但是,文档的某些标题在文件标题中有斜杠和其他可能的坏字符,因此我想用下划线替换它们:

代码语言:javascript
复制
bad_characters = ["/", "\\", ":", "(", ")", "<", ">", "|", "?", "*"]
for letter in bad_characters:
    filename = line[2].replace(letter, "_")
    foldername = line[5].replace(letter, "_")

2/19/2008.doc"

  • Example of line[5]:"Blah无聊的会议:“商务会议2/2008"

当我在print letter循环中添加for时,它会打印出它应该替换的字母,但实际上不会像我希望的那样用下划线替换该字符。

我在这里做错什么了吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-08-19 15:01:33

这是因为filenamefoldername在循环的每一次迭代中都会被丢弃。.replace()方法返回一个字符串,但不会将结果保存到任何地方。

你应该使用:

代码语言:javascript
复制
filename = line[2]
foldername = line[5]

for letter in bad_characters:
    filename = filename.replace(letter, "_")
    foldername = foldername.replace(letter, "_")

但我会用regex来做。它更干净,而且(可能)更快:

代码语言:javascript
复制
p = re.compile('[/:()<>|?*]|(\\\)')
filename = p.sub('_', line[2])
folder = p.sub('_', line[5])
票数 30
EN

Stack Overflow用户

发布于 2010-08-19 15:01:22

在循环的每一次迭代中,您都要重新分配到filenamefoldername变量。实际上,只有*正在被替换。

票数 6
EN

Stack Overflow用户

发布于 2010-08-19 15:04:15

您应该看看python string方法translate() http://docs.python.org/library/string.html#string.translatehttp://docs.python.org/library/string.html#string.maketrans

根据下面的评论建议,编辑这个示例以添加一个示例:

代码语言:javascript
复制
import string
toreplace=''.join(["/", "\\", ":", "(", ")", "<", ">", "|", "?", "*"]) 
underscore=''.join( ['_'] * len(toreplace))
transtable = string.maketrans(toreplace,underscore)
filename = filename.translate(transtable)
foldername = foldername.translate(transtable)

可以通过使替换“/\:”之类的东西来简化,我只是使用了上面给出的

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3523054

复制
相关文章

相似问题

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