2011-08-19 42 views
1

我有这样的脚本,需要更换一个文件扩展名,它是不是这样做正确:Python的搜索和替换不更换正确

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

+0

你的额头请注明您的输入文件的样本(“links.htm”?)。 – stderr

回答

2

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

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

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)) 

有了:

sx = str(x) 
tmp = sx if len(sx) >= 2 else "0" + sx 
buffer = buffer.replace(item + sx, item.upper()+ "-" + tmp) 

,或者甚至更好:

buffer = buffer.replace(item + str(x), "%s-%02d" % (item.upper(), int(x))) 
+1

字符串格式说明符也可以工作。 – nmichaels

0

if x < 10: 

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

if x <= 10: 

您会惊讶这种情况发生的频率,至少对我而言。

+0

它被称为“栅栏柱错误”(引自“如果你建立一个50英尺长的围栏与一个岗位上一切五尺,有多少帖子,你需要什么?”回答这个问题:** 11 **),我做这一切的时间但不是,这不是OP的问题。 – Malvolio

+0

啊!事实上你是对的,我没有仔细阅读。 – andronikus

1

当文件ff10不应该被更改为FF-010时。它应该改为FF-10

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

如果你愿意,你可以在这里爆炸--> <--