Управление и замена 1-й строки и поддержка 2-й строки с использованием Python - PullRequest
0 голосов
/ 19 марта 2019

У меня есть файл (sysid.txt), который состоит из нескольких строк данных (systemid и hostname) следующим образом

0192.4500.0000 uue01.re1                              
0192.4500.0010 ccu01.re1                              
0192.4500.0110 uue02.re1                               
0192.4500.0001 core1.re2                                   

Исходя из приведенной здесь информации и справки, 1-я строка (числа) успешно заменяется по мере необходимости, но 2-я строка (имя хоста) отсутствует, а выходные данные отображаются в одной строке, когда я запускаю приведенный ниже код.

file1 = open('sysid.txt', 'r')
file2 = open('sysip.txt', 'w')
file1_cont = file1.readlines()
for line in file1_cont:
    line = line.replace('.', '')
    f = itemgetter(slice(0,3), slice(3,6), slice(6,9), slice(9,12))
    line = '.'.join(f(line.replace('.','')))
    line = '{}.{}.{}.{}'.format(*map(int, f(line.replace('.', ''))))
    file2.write(line)
    print(line)

вывод sysip.txt

10.89.0.010.89.0.110.89.0.3210.89.0.3310.89.0.3410.89.0.3510.89.0.64

Прочитайте каждую строку, я хотел бы заменить 1-ю строку (числа) и сохранить 2-ю строку (имя хоста), как показано ниже

192.45.0.0 uue01.re1                              
192.45.0.10 ccu01.re1                              
192.45.0.110 uue02.re1                               
192.45.0.1 core1.re2

Как я могу манипулировать 1-й строкой / числами и сохранять строку вывода (file2.write (line)) в новой строке и в то же время оставаться 2-й строкой, как указано выше.

Спасибо за вашу поддержку и руководство.

#

обновлен list.txt ...

System ID      Hostname                                        
0192.4500.0000 uue01.re1                              
0192.4500.0010 ccu01.re1                              
0192.4500.0110 uue02.re1                               
0192.4500.0001 core1.re2 

{master}

Ответы [ 2 ]

0 голосов
/ 19 марта 2019

list.txt:

0192.4500.0000 uue01.re1                              
0192.4500.0010 ccu01.re1                              
0192.4500.0110 uue02.re1                               
0192.4500.0001 core1.re2   

Следовательно :

def removeZeros(ip):
    # splits the ip by "."
    # converts the words to integeres to remove leading removeZeros
    # convert back the integer to string and join them back to a string
    new_ip = ".".join([str(int(i)) for i in ip.split(".")])
    return new_ip

logFile = "list.txt"
with open(logFile) as f:
    content = f.readlines()
# you may also want to remove empty lines
content = [l.strip() for l in content if l.strip()]

for line in content:
    line = line[1:].split(" ")[0]
    line =  removeZeros(line).replace(removeZeros(line).split(".", 2)[1],removeZeros(line).split(".", 2)[1][:-2] + ".0")
    print(line)

ВЫХОД :

192.45.0.0
192.45.0.10 
192.45.0.110 
192.45.0.1 

РЕДАКТИРОВАНИЕ :

Если вы хотите перезаписать новый ip list в один и тот же файл, вы можете создать два отдельных списка для хранения ips и text:

logFile = "list.txt"
with open(logFile) as f:
    content = f.readlines()
# you may also want to remove empty lines
content = [l.strip() for l in content if l.strip()]
ipList = []
stList = []
for line in content:
    stList.append(line[1:].split(" ")[1])
    line = line[1:].split(" ")[0]
    line =  removeZeros(line).replace(removeZeros(line).split(".", 2)[1],removeZeros(line).split(".", 2)[1][:-2] + ".0")
    ipList.append(line)
    # print(line)

with open(logFile, "w") as f:
    for index in range(len(ipList)):
        f.write(str(ipList[index]) + " " + str(stList[index]) + "\n")

ВЫХОД (из файла) :

192.45.0.0 uue01.re1
192.45.0.10 ccu01.re1
192.45.0.110 uue02.re1
192.45.0.1 core1.re2

РЕДАКТИРОВАТЬ 3 :

Для удаления первогои в последней строке используйте нарезку:

Замените эту строку:

for line in content:

на эту:

for line in content[1:-1]:  # after the first and before the last line
0 голосов
/ 19 марта 2019

Как я могу манипулировать 1-й строкой / числами [...] и в то же время оставаться 2-й строкой, как указано выше.

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

Пример:

s = "0192.4500.0010 ccu01.re1                              "
numbers, host = s.split()
numbers = numbers.replace(".", "")
# TODO: fill in appropriate conversions with `numbers` here
print(numbers, host)

Вывод:

019245000010 ccu01.re1

Для справки:


Как я могу [...] сохранить строку вывода (file2.write (line)) в новой строке

При записи вывода в файл символы новой строки не добавляются автоматически.Вы должны добавить их в строку самостоятельно.

Пример:

numbers = "{}.{}.{}.{}".format(*numbers)
line = "{} {}\n".format(numbers, host)
outf.write(line)

Также полезно использовать оператор with для открытия и закрытия файлов.

Для справки:

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