2011-08-19 3 views
1

내가 파일 확장자를 교체 할 필요가이 스크립트를 가지고 그렇게 제대로 수행되지 않습니다파이썬 검색 및 교체하지 않을 교체가 제대로

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

몰두 할 수 있습니다. – 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의 경우 true이고 10+의 경우 false입니다. 그것이 # 10에서 잘못된 행동을 취하는 이유입니다. 그것을 다음과 같이 변경하십시오 :

if x <= 10: 

적어도 나에게 이런 일이 얼마나 자주 일어나는지 놀랄 것입니다.

+0

"fencepost error"라고합니다 ("5 피트마다 한 개의 포스트가있는 50 피트 울타리를 만들면 얼마나 많은 게시물이 필요합니까?"답변 : ** eleven **). 하지만 OP의 문제는 아니 었습니다. – Malvolio

+0

아! 실제로 네 말이 맞아, 나는 충분히 신중하게 읽지 않았다. – andronikus

1

파일 ff10이 없어야 할 때 FF-010으로 변경됩니다. FF-10으로 변경해야합니다.

"should"에 대한 정의가 필요합니다. 실제로 코드에서 ff1 부분을 인식하고 FF-01으로 변경하고 있습니다. 여분의 0은 이미 버퍼에있었습니다. 당신이 좋아하는 경우

, 당신은 (? "links.htm") 당신의 입력 파일의 샘플을주십시오 여기 --> <--

관련 문제