Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.80/55: Рейтинг темы: голосов - 55, средняя оценка - 4.80
2 / 2 / 1
Регистрация: 15.08.2013
Сообщений: 152

Скопировать в файле первое слово (до пробела) каждой строки

07.06.2014, 17:07. Показов 12135. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Помогите пожалуйста решить задачку:
логфайл типа :

00178F270C82 eth0 000000000000 0 25727 299 1


0090E825627E eth0 000000000000 0 14773 298 1


00043500BBF4 * eth0 000000000000 0 0 0 2


E0699511FEDE eth0 000000000000 0 37444 293 1



Мне нужно так же в столбик вывести первый макадрес каждой строки.
Кстати в файле могут быть еще всякие символы и до и после этих столбцов, но решения с этим вариантом тоже сойдет
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.06.2014, 17:07
Ответы с готовыми решениями:

Горе-летописец. Первое слово каждой строки текстового файла (первое поле каждой записи в массиве записей)
Горе-летописец. Первое слово каждой строки текстового файла (первое поле каждой записи в массиве записей) содержит дату события в формате...

Продублировать в текстовом файле первое и последнее слово в каждой строке
Помоготе пожалуста зделать программу на ассемлере: "Продублировать в файле первое и последнее слово в каждой строке" Буду...

Найти в первом файле строку из второго файла и скопировать всё с первого вхождения найденной строки и до пробела
Есть два файла со списками: В первом файле список, а во втором часть списка, просто строки из первого файла. Нужно найти в...

27
 Аватар для smoke853
505 / 511 / 42
Регистрация: 12.12.2013
Сообщений: 484
09.06.2014, 08:08
Студворк — интернет-сервис помощи студентам
В 11 посте, в коде, который я писал, у меня все записывается без лишних пустых строк.
Кстати, а что лежит в файле dust.txt? Выложите его, может, что-то и прояснится.
0
2 / 2 / 1
Регистрация: 15.08.2013
Сообщений: 152
09.06.2014, 08:20  [ТС]
Это дело выдергивается с телнета, так что возможны искажения по шрифту и символам:
dust.txt
0
 Аватар для smoke853
505 / 511 / 42
Регистрация: 12.12.2013
Сообщений: 484
09.06.2014, 08:24
Хорошо, тогда, что делает вот этот код?
Python
1
2
3
4
5
word = 'Device name'
ft = open('M:\\Users\\smoke\\Desktop\\dust.txt').readlines()
for DN in ft:
    if word in DN:
        print(DN)
В данном случае у меня ничего не выводится.
1
2 / 2 / 1
Регистрация: 15.08.2013
Сообщений: 152
09.06.2014, 08:45  [ТС]
Действительно у меня что то не то... В этот файл запихивает последнего клиента и не выводит его в результат...
Вообще этот файл служит для того, что бы выдергивать название клиента, там строчка есть например: "Device name: KolvaGPS". Надо подумать.
0
 Аватар для smoke853
505 / 511 / 42
Регистрация: 12.12.2013
Сообщений: 484
09.06.2014, 08:53
dexterdx, ясно, я просто даже не знаю, для чего нужен этот telnetlib модуль. Судя по вашему коду из 12 поста, вы в finditer передаете переменную r, а ей присвоена tn.read_very_eager(), че это такое я даже без понятия.
И еще, если вы не используете with open ... Тогда когда открываете файл на запись, его нужно и закрывать. Т.е. нужно еще дописывать f.close()
0
2 / 2 / 1
Регистрация: 15.08.2013
Сообщений: 152
09.06.2014, 13:50  [ТС]
У меня телнет в телнете. В этом сложность. На конечное устройство(клиент) нельзя попасть напрямую, только через базу. Оно и не пингуется просто так. По этому telnetlib не может на клиенте обработать телнетовские исключения и ответы. То есть я не могу написать например tn.telnetlib.Telnet(ip клиента), потому что я уже нахожусь в телнете базы. И приходится писать текстовые команды типа tn.write("telnet "+ ic + "\r"). Я пишу тленетовскими командами на базе а не командами telnetlib. Я надеюсь я понятно изъясняюсь
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
filebs = [p.rstrip() for p in open('ipbs.txt')]
for ib in filebs:
    try:
        tn = telnetlib.Telnet(ib)
        tn.read_until("Login:")
        tn.write(user + "\r")
        tn.read_until("Password:")
        tn.write(psw + "\r")
        print "Зашел на базу"
    except Exception as e:
        continue
    filecl = [p1.rstrip() for p1 in open('ipcl.txt')]
    for ic in filecl:
        try:
            time.sleep(2)
            tn.write("telnet "+ ic + "\r")
            tn.read_until("Login:")
            tn.write(user + "\r")
            tn.read_until("Password:")
            tn.write(psw + "\r")
            print "Зашел на клиента"
            tn.write("switch group 1200 dump eth0\r")
            time.sleep(2)
            res=tn.read_very_eager()
            time.sleep(1)
            DN = re.findall(r'Device name: (.*)$', res, re.M)
            print DN
            time.sleep(2)
            for i in re.finditer(r'^[A-Z0-9]{12}', res, re.M):
                f = open("lognew.txt", "a")
                f.write(i.group(0) + " "+ DN)
                print(i.group(0) + " " + DN)
        except Exception as e:
            continue
В общем проблема у меня была с последним клиентом, там конфиг надо поправить, из-за него не правильно выходные данные были. Сделал вывод "Device name" через регулярное выражение и вот что оно мне пишет:
Кликните здесь для просмотра всего текста
Зашел на базу
Зашел на клиента
['kolvaKust1oper\r\r']
Зашел на клиента
['Kolva_drilling_kust2\r\r\r']

С каждой итерацией добавляется "\r" - не могу понять почему... Да и к тому же у меня перестал записывать результат в файл "lognew.txt".
Python
1
2
3
4
5
6
7
8
9
res=tn.read_very_eager()
            time.sleep(1)
            DN = re.findall(r'Device name: (.*)$', res, re.M)
            print DN
            time.sleep(2)
            for i in re.finditer(r'^[A-Z0-9]{12}', res, re.M):
                f = open("lognew.txt", "a")
                f.write(i.group(0) + " "+ DN)
                print(i.group(0) + " " + DN)
0
 Аватар для smoke853
505 / 511 / 42
Регистрация: 12.12.2013
Сообщений: 484
09.06.2014, 15:24
Цитата Сообщение от dexterdx Посмотреть сообщение
С каждой итерацией добавляется "\r"
Не знаю, может потому что, вы добавляете + "\r" в цикле, а может и нет.
А что если не писать + "\r"?
Я так понял в переменной DN, лежит список: ['kolvaKust1oper\r\r'], и как он у вас конкатенируется со строкой? эти возвраты каретки можно попробовать убрать как-то так:
Python
1
DN = DN[0].replace('\r', '')
Теперь в DN будет лежать не список, а строка 'kolvaKust1oper'

Цитата Сообщение от dexterdx Посмотреть сообщение
перестал записывать результат в файл "lognew.txt".
Вместо "a" попробуйте "w". И зачем вы создаете файл lognew в цикле?

Судя по всему должно получиться, что-то вроде этого:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import re
 
path_read = "M:\\Users\\smoke\\Desktop\\logsh.txt"
path_write = "M:\\Users\\smoke\\Desktop\\new.txt"
 
DN = ['kolvaKust1oper\r\r']
DN = DN[0].replace('\r', '')
 
with open(path_read) as f, open(path_write, 'w') as fw:
    for i in re.finditer(r'^[A-Z0-9]{12}', f.read(), re.M):
        fw.write(i.group(0) + " " + DN + "\n")
 
# new.txt
# 00178F270C82 kolvaKust1oper
# 0090E825627E kolvaKust1oper
# 00043500BBF4 kolvaKust1oper
# E0699511FEDE kolvaKust1oper
1
2 / 2 / 1
Регистрация: 15.08.2013
Сообщений: 152
09.06.2014, 17:35  [ТС]
Цитата Сообщение от smoke853 Посмотреть сообщение
Не знаю, может потому что, вы добавляете + "\r" в цикле, а может и нет.
А что если не писать + "\r"?
"\r" - это кнопка Enter в телнете.
В общем разобрался! дело было DN. Ее "\r" мешали записывать макадреса в файл. После того как я применил DN = DN[0].replace('\r', '') все стало нормально!
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
filebs = [p.rstrip() for p in open('ipbs.txt')]
for ib in filebs:
    try:
        tn = telnetlib.Telnet(ib)
        tn.read_until("Login:")
        tn.write(user + "\r")
        tn.read_until("Password:")
        tn.write(psw + "\r")
        print "Зашел на базу"
    except Exception as e:
        continue
    filecl = [p1.rstrip() for p1 in open('ipcl.txt')]
    for ic in filecl:
        try:
            time.sleep(2)
            tn.write("telnet "+ ic + "\r")
            tn.read_until("Login:")
            tn.write(user + "\r")
            tn.read_until("Password:")
            tn.write(psw + "\r")
            print "Зашел на клиента"
            tn.write("switch group 1200 dump eth0\r")
            time.sleep(2)
            res=tn.read_very_eager()
            DN = re.findall(r'Device name:(.*)$', res, re.M)
            DN = DN[0].replace('\r', '')
            print DN
            time.sleep(2)
            for i in re.finditer(r'^[A-Z0-9]{12}', res, re.M):
                f = open("lognew.txt", "a")
                f.write(i.group(0) + " "+ DN + "\n")
                print(i.group(0) + " " + DN)
        except Exception as e:
            continue
Вот такой вывод в файл:
Кликните здесь для просмотра всего текста

00259C6D1176 kolvaKust1oper
0000541844DD kolvaKust1oper
0090E825628D kolvaKust1oper
0090E82467B5 kolvaKust1oper
00043500AD03 kolvaKust1oper
00207517E8FC kolvaKust1oper
BCAEC5DBF940 kolvaKust1oper
00908F2710F9 Kolva_drilling_kust2
20CF309C3D7E Kolva_drilling_kust2
00C0EE89A9F6 Kolva_drilling_kust2
00043500AD0C Kolva_drilling_kust2
0021155F4854 KolvaGPS
00043500BBFE KolvaGPS
14DAE995DF63 KolvaGPS
00043500BBF7 kolvaOhranaUPN node
00E10E39EB6C kolvaOhranaUPN node
0630047EF3E4 kolvaOhranaUPN node
00259C6D118C kolvaKust2oper
000435012CF8 kolvaKust2oper
000054184C56 kolvaKust2oper
0090E825626D kolvaKust2oper
0090E82467BB kolvaKust2oper
00207517E8FE kolvaKust2oper
E0699511F7F4 kolvaKust2oper
E06995091E9F kolvaSklad
00168F0993DC kolvaSklad
00C0EE89AAD4 kolvaSklad
00043500BBF0 kolvaSklad
001D607CEEF0 kolvaSklad

Спасибо большое! Очень помогли!!!
P.S: Если ставлю "w" - пишется в файл одна последняя строчка.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.06.2014, 17:35

Скопировать второе слово каждой строки файла в начало следующей строки
Моё задание: Скопировать второе слово каждой строки в начало следующей строки.

Скопировать второе слово каждой строки в начало следующей строки
Привет, прошу помощи! Заранее спасибо! Индивидуальное задание: Скопировать второе слово каждой строки в начало следующей строки ...

Работа с файлами (Скопировать второе слово каждой строки в начало следующей строки)
Скопировать второе слово каждой строки в начало следующей строки. Примечания: 1. Имя файла, который подлежит обработке, должно быть...

Перенести первое слово каждой строки в ее конец
Нужно перенести первое слово каждой строки в ее конец! Вот моя пограмма, но я не могу понять как написать ту часть программы в...

Удалить первое слово из каждой строки файла
Помогите сделать программу и Объясните пожалуйста. Задача.Дан текстовый файл, состоящий из нескольких строк, строки содержат слова,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Новые блоги и статьи
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2. Задача: Обеспечить запись документа в регистр сведений независимо от. . .
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется. Ну как вам?
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания источниках данных и элементов формы(текстовые поля и метки), опирается все это на технологию событий и мета. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru