Zer*_*ime 13 python string str-replace
一些背景信息:我有一个古老的基于Web的文档数据库系统,我工作,几乎完全由具有"正常"扩展名(.doc,.xls,.ppt)的MS Office文档组成.它们都是基于某种任意ID号(即1245.doc)命名的.我们正在切换到SharePoint,我需要重命名所有这些文件并将它们分类到文件夹中.我有一个包含各种信息的CSV文件(比如哪个ID号对应于哪个文档的标题),所以我用它来重命名这些文件.我写了一个简短的Python脚本,重命名ID号标题.
但是,文档的某些标题在文件的标题中有斜杠和其他可能不好的字符,所以我想用下划线替换它们:
bad_characters = ["/", "\\", ":", "(", ")", "<", ">", "|", "?", "*"]
for letter in bad_characters:
filename = line[2].replace(letter, "_")
foldername = line[5].replace(letter, "_")
Run Code Online (Sandbox Code Playgroud)
line[2]:"Blah blah boring - meeting 2/19/2008.doc"line[5]:"商务会议2/2008"当我添加循环print letter内部时for,它将打印出它应该替换的字母,但实际上不会像我想要的那样用下划线替换该字符.
我有什么问题吗?
Nul*_*ion 25
这是因为filename和foldername得到扔掉与循环的每个迭代.该.replace()方法返回一个字符串,但您没有将结果保存在任何位置.
你应该使用:
filename = line[2]
foldername = line[5]
for letter in bad_characters:
filename = filename.replace(letter, "_")
foldername = foldername.replace(letter, "_")
Run Code Online (Sandbox Code Playgroud)
但我会用正则表达式来做.它更清洁,(可能)更快:
p = re.compile('[/:()<>|?*]|(\\\)')
filename = p.sub('_', line[2])
folder = p.sub('_', line[5])
Run Code Online (Sandbox Code Playgroud)