抱歉,但是我无法从Python文档或从Google找到的任何内容中弄清楚这一点。
因此,我一直在从StackOverflow的一位出色助手中重命名代码为99%的文件。
我正在整理一个重命名脚本(这是我从这里的人那里得到的帮助),该脚本可以使用名称(而不是扩展名)。
我确定我会提出更多的替代方案,但是目前的问题是我不知道该怎么做一个以上的替代方案。 当前代码(用空格替换点):
import os, shutil, re
def rename_file (original_filename):
name, extension = os.path.splitext(original_filename)
#Remove Spare Dots
modified_name = re.sub("\.", r" ", name)
new_filename = modified_name + extension
try:
# moves files or directories (recursively)
shutil.move(original_filename, new_filename)
except shutil.Error:
print ("Couldn't rename file %(original_filename)s!" % locals())
[rename_file(f) for f in os.listdir('.') if not f.startswith('.')]
Run Code Online (Sandbox Code Playgroud)
希望也
re.sub("C126", "Perception", name)
re.sub("Geo1", "Geography", name)
Run Code Online (Sandbox Code Playgroud)
另外,如果我能将除“ and | if”以外的任何单词的首字母大写,那将是很棒的
我试过了
modified_name = re.sub("\.", r" ", name) && re.sub(...
Run Code Online (Sandbox Code Playgroud)
但是那没有用;也没有把它们放在不同的线上。我要如何做/制作所有的潜水艇和东西?
只需一遍又一遍地对相同的字符串进行操作,每次都将其替换:
name = re.sub(r"\.", r" ", name)
name = re.sub(r"C126", "Perception", name)
name = re.sub(r"Geo1", "Geography", name)
Run Code Online (Sandbox Code Playgroud)
@DanielRoseman是正确的,这些是文字形式,不需要正则表达式即可描述/找到/替换。您可以timeit用来说明普通的旧版本replace()是可取的:
In [16]: timeit.timeit("test.replace('asdf','0000')",setup="test='asdfASDF1234'*10")
Out[16]: 1.0641241073608398
In [17]: timeit.timeit("re.sub(r'asdf','0000',test)",setup="import re; test='asdfASDF1234'*10")
Out[17]: 6.126996994018555
Run Code Online (Sandbox Code Playgroud)
好吧,每次调用 re.sub() 时,它都会返回一个新的、更改过的字符串。因此,如果您想继续修改每个新字符串,请继续将新字符串分配给相同的变量名称。本质上,不要认为自己一遍又一遍地修改同一个字符串 - 相反,认为自己每次都修改一个新的字符串。
示例:如果您使用字符串“lol.Geo1”,
newString = re.sub("\.", r" ", originalString)
Run Code Online (Sandbox Code Playgroud)
将返回字符串“lol Geo1”,并将其分配给 newString。现在,如果您想更改该新字符串,请进行下一次替换,它将返回另一个字符串,您可以再次将其放入“newString”中 -
newString = re.sub("Geo1", "Geography", newString)
Run Code Online (Sandbox Code Playgroud)
现在,newString 的计算结果为“lol Geography”。每次替换都会创建一个新字符串,而不是同一个字符串。这就是为什么
modified_name = re.sub("\.", r" ", name) && re.sub(...
Run Code Online (Sandbox Code Playgroud)
不起作用 - “re.sub(".", r" ", name)” 将返回一个字符串,“re.sub(...)” 将返回另一个字符串,等等 - 其中每一个字符串仅在原始字符串上进行单独替换,如下所示:
modified_name = "lol Geo1" && "lol.Geography"...
Run Code Online (Sandbox Code Playgroud)
因此,要使其正常工作,请遵循其他发帖人的建议 - 只需对所需的每个替换重复分配,将替换的 newString 分配给自身,直到完成所有替换。
希望这是一个明确的解释。随意问的问题。:)
| 归档时间: |
|
| 查看次数: |
6254 次 |
| 最近记录: |