首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python搜索和替换未正确替换

Python搜索和替换未正确替换
EN

Stack Overflow用户
提问于 2011-08-20 01:57:36
回答 3查看 624关注 0票数 1

我有一个需要替换文件扩展名的脚本,但它没有正确地这样做:

代码语言:javascript
复制
import os
import sys

#directory is the directory we will work from
directory = "C:\\Users\\joe\\Desktop"
os.chdir(directory)

whatToLookFor = ["Ca", "Cb", "Cd", "Ce", "Cf", "Cg", "Ch", "Ci", "Cj", "Ck", "Cl", "Cm", "Cn", "Co",
                 "Fa", "Fb", "Fc", "Fd", "Fe", "Ff", "Fg", "Fh", "Fi", "Fk", "Fl", "Fm", "Fn", "Fo", 
                 "Fp", "Ga", "Gb", "Gc", "Gd", "Ge", "Gf", "Gg", "Gh", "Gi", "Gj", "Gk", "Gn", "Ja",
                 "Jb", "Jc", "Jd", "Je", "Jf", "Jg", "Jh", "Jk", "Jl", "Jm", "Fj", "cc", "cb", "cd",
                 "ce", "cf", "cg", "ch", "ci", "cj", "ck", "cl", "cm", "cn", "co", "fa", "fb", "fc",
                 "fd", "fe", "ff", "fg", "fh", "fi", "fk", "fl", "fm", "fn", "fo", "fp", "ga", "gb", 
                 "gc", "gd", "ge", "gf", "gg", "gh", "gi", "gj", "gk", "gn", "ja", "jb", "jc", "jd", 
                 "je", "jf", "jg", "jh", "jk", "jl", "jm", "fj"]

oldFile = open("links.htm", "r")
newFile = open("python test.htm", "w")
buffer = oldFile.read()

for item in whatToLookFor:
    for x in range(0, 80):
        if x < 10:
            buffer = buffer.replace(item + str(x), item.upper() + "-0" + str(x))
        else:
            buffer = buffer.replace(item + str(x), item.upper() + "-" + str(x))

newFile.write(buffer)

oldFile.close()
newFile.close()

文件ff10正在被更改为FF-010,而它不应该被更改。应更改为FF-10

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-08-20 02:04:18

如果不知道你的实际输入是什么,这将是非常困难的,然而,我确实注意到了一件事。看起来你在尝试确保你的缓冲区中有两位数的数字(在whatToLookFor中的项目之后)。

如果这是真的,生活可能会更容易,如果你取代这个:

代码语言:javascript
复制
if x < 10:
    buffer = buffer.replace(item + str(x), item.upper() + "-0" + str(x))
else:
    buffer = buffer.replace(item + str(x), item.upper() + "-" + str(x))

通过以下方式:

代码语言:javascript
复制
sx = str(x)
tmp = sx if len(sx) >= 2 else "0" + sx
buffer = buffer.replace(item + sx, item.upper()+ "-" + tmp)

或者,更好的是:

代码语言:javascript
复制
buffer = buffer.replace(item + str(x), "%s-%02d" % (item.upper(), int(x)) )
票数 2
EN

Stack Overflow用户

发布于 2011-08-21 04:45:57

文件ff10正在更改为FF-010,而不应该是FF-010。应更改为FF-10

关于“应该”的一些定义。实际上,您的代码正在识别ff1部件并将其更改为FF-01。额外的0已经在缓冲区中。

如果你愿意,你可以在这里敲你的额头,--> <--

票数 1
EN

Stack Overflow用户

发布于 2011-08-20 05:02:14

你的

代码语言:javascript
复制
if x < 10:

对于0-9,条件为真,对于10+,条件为假。这就是为什么你在#10上得到了错误的行为。

代码语言:javascript
复制
if x <= 10:

你会惊讶于这种事情经常发生,至少对我来说是这样。

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

https://stackoverflow.com/questions/7125510

复制
相关文章

相似问题

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