Python поиск и замена не заменяет должным образом - PullRequest
1 голос
/ 19 августа 2011

У меня есть этот скрипт, который должен заменить расширение файла, и он делает это неправильно:

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

Ответы [ 3 ]

2 голосов
/ 19 августа 2011

Не зная, каков ваш фактический вклад, вам будет очень трудно помочь, однако я заметил одну вещь.Похоже, вы пытаетесь убедиться, что в вашем буфере есть две цифры (после элемента из 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 голос
/ 21 августа 2011

Файл ff10 изменяется на FF-010, когда это не должно быть.Это должно быть изменено на FF-10

Для некоторого определения "следует".Фактически, ваш код распознает часть ff1 и изменит ее на FF-01.Дополнительные 0 уже были в буфере.

Если хотите, вы можете ударить лоб здесь --> <--

0 голосов
/ 20 августа 2011

Ваше

if x < 10:

условие истинно для 0-9 и ложно для 10+.Вот почему вы получаете неправильное поведение на # 10.Измените его на:

if x <= 10:

Вы будете удивлены, как часто это происходит, по крайней мере со мной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...