Разбор текста в Python - PullRequest
0 голосов
/ 24 июля 2011

Я знаю, что это легко, но я новичок в программировании, и любая помощь будет принята с благодарностью.

У меня есть текстовый файл, в котором есть несколько чисел (по одному на строку). Мне нужно открыть файл и разделить число на три. Если число «123456», мне нужно разделить его на «14», «25», «36», другими словами, мне нужно, чтобы оно пошло (x1x2), (y1y2), (z1, z2) для числа x1y1z1x2y2z2. Для нечетных чисел я хочу добавить ноль в последнюю группу, чтобы выровнять его. Спасибо за помощь, я безнадежен в программировании.

Ответы [ 3 ]

2 голосов
/ 24 июля 2011

Одно простое предложение.Преобразуйте свой номер в список и оперируйте элементами списка.

>>> list("123456")
['1', '2', '3', '4', '5', '6']
>>> 

Теперь вам будет намного легче справиться с этим.Если нет, то, возможно, вам следует начать с некоторых учебных пособий по Python.

1 голос
/ 24 июля 2011

Это должно соответствовать вашему примеру:

s = "123456"
ss = [s[i::3] for i in range(3)]
ss
> ['14', '25', '36']

Чтобы убедиться, что строки равны по длине, вы можете либо дополнить исходную строку:

s = s.ljust((len(s)+2)//3 * 3, '0')

или сделать:

l = (len(s)+2)//3
ss = [s[i::3].ljust(l, '0') for i in range(3)]
0 голосов
/ 24 июля 2011

Таким образом, поскольку вы разбиваете на трети, проблема не в нечетных числах, а в том, что числа не делятся на 3. Вот функция, которая принимает строку и возвращает кортеж срезов этого строка.

def triplet(s):
    extra_zeros = (3 - len(s)) % 3
    s += '0' * extra_zeros
    return (s[::3], s[1::3], s[2::3])

Вот демонстрация его поведения:

>>> triplet('123456')
('14', '25', '36')
>>> triplet('1234567')
('147', '250', '360')
>>> triplet('12345678')
('147', '258', '360')
>>> triplet('123456789')
('147', '258', '369')
...