Текст ошибки Заменить код: - PullRequest
1 голос
/ 21 августа 2011

Я не могу понять, почему я продолжаю получать этот глючный вывод.

Входной файл:

ff1
ff2
ff3
ff10
ff11
ff20
ff21
ff23
gb20
gb10
gh23

Выходной файл:

FF01
FF02
FF03
FF010
FF011
FF020
FF021
FF023
GB020
GB010
GH023

Код:

import os
import sys

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

renameWhat = ["ff", "gb", "gh"]

oldFile = open("New Text Document.txt")
buffer = oldFile.read()

for item in renameWhat:
    for i in range(0, 50):
        if i < 10:
            buffer = buffer.replace(item + str(i), item.upper() + "0" + str(i))
        else:
            buffer = buffer.replace(item + str(i), item.upper() + str(i))

outFile = open("test.txt", "w")
outFile.write(buffer)
outFile.close()
oldFile.close()

Что должно произойти:

Я пытаюсь заменить ff на верхний регистр (готово), затем мне нужно добавить нули ко всем числам, которые less than or equal to 9.Поэтому я думаю, что if i is less than 10 должно быть достаточно хорошим;но это не потому, что это добавляет нули ко всему, что больше 9. Я пытался с len(str(i)), чтобы убедиться, что он только одной длины, но это все равно не работает;что мне не хватает?

Ответы [ 4 ]

3 голосов
/ 22 августа 2011

Причина, по которой ваше оригинальное решение не работает, заключается в том, что он не проверяет, соответствует ли оно всей строке / слову / номеру. Так, например, после замены ff1 на FF01 ваш буфер теперь:

FF01
ff2
ff3
FF010
FF011
ff20
ff21
ff23
gb20
gb10
gh23
2 голосов
/ 21 августа 2011

Вот простое решение:

with open("New Text Document.txt") as oldFile:
    with open("test.txt", "w") as outFile:
        for line in oldFile:
            start, end = line[:2], line[2:]
            outfile.write(start.upper() + end.strip().zfill(2) + '\n')

Если вы хотите использовать только префиксы в верхнем регистре:

with open("New Text Document.txt") as oldFile:
    with open("test.txt", "w") as outFile:
        for line in oldFile:
            start, end = line[:2], line[2:]
            if start in renameWhat:
                start = start.upper()
            outfile.write(start + end.strip().zfill(2) + '\n')
1 голос
/ 21 августа 2011

Просто используйте метод zfill string :

>>> str(1).zfill(2)
'01'
>>> str(10).zfill(2)
'10'
0 голосов
/ 21 августа 2011
import re
a = """ff1
ff2
ff3
ff10
ff11
ff20
ff21
ff23
gb20
gb10
gh23
"""

regex = re.compile('([a-zA-Z]*)([0-9]*)\n')
b = ""
for i in regex.findall(a):
    if i[0] in ['ff','gb','gh']:
        b+=i[0].upper()
    else:
        b+=i[0]
    if int(i[1]) < 10:
        b+= "0"
    b+= i[1]+"\n"
print b

Результат:

FF01
FF02
FF03
FF10
FF11
FF20
FF21
FF23
GB20
GB10
GH23
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...