Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 3, 2021 11:05:28

Dmitriy_Z
Зарегистрирован: 2020-12-03
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Замена слова в файле.

Добрый день. Необходимо заменить в формализованном файле слово “00000” на соответствующее значение из другой строки. Файл представляет собой список, где формат записи повторяется каждые 3 строки:
M2 PATHFINDER
1 45727U 20037E 20188.86502194 +.00000000 +00000-0 00000-1 0 00000
2 00000 97.7019 8.5530 0011736 229.6833 130.3359 14.91194477 2752
GAOFEN DUOMO (GFDM)
1 45856U 20042A 20188.90426115 +.00000000 +00000-0 00000-1 0 00009
2 00000 98.0171 261.9010 0011999 250.8191 109.1719 14.76719764 552
BY70-2
1 45857U 20042B 20188.90566225 +.00000000 +00000-0 00000-1 0 00006
2 00000 98.0148 261.9000 0009995 238.0031 122.0206 14.76180781 465
STARLINK
1 45753U 20038Z 20188.58795034 +.00000000 +00000-0 00000-1 0 00007
2 00000 52.9969 182.6350 0002434 313.5831 46.4982 15.64270213 3179

Необходимо заменить “00000” на первой позиции третьей строки (не считая “2”) на первые 5 цифр второй строки (не считая “1”).

Ниже пример что должно получится:

Исходный текст:
BY70-2
1 45857U 20042B 20188.90566225 +.00000000 +00000-0 00000-1 0 00006
2 00000 98.0148 261.9000 0009995 238.0031 122.0206 14.76180781 465
Результат:
BY70-2
1 45857U 20042B 20188.90566225 +.00000000 +00000-0 00000-1 0 00006
2 45857 98.0148 261.9000 0009995 238.0031 122.0206 14.76180781 465

Сложность в том, что в тексте есть еще стоки “00000” и их менять не нужно. Если я правильно думаю, то необходимо считать каждую третью строку и сделать в них замену, затем записать обратно на свои места?Либо поставить соответствие “00000” третьей строки и “45857” второй строки с указанием конкретной позиции в файле? Помогите необразованному)

Офлайн

#2 Фев. 3, 2021 11:08:25

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Замена слова в файле.

Dmitriy_Z
считать каждую третью строку и сделать в них замену
конечно если вам именно это нужно

Офлайн

#3 Фев. 3, 2021 11:42:18

Dmitriy_Z
Зарегистрирован: 2020-12-03
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Замена слова в файле.

marvellik
я не знаю как это реализовать

Офлайн

#4 Фев. 3, 2021 12:28:10

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9880
Репутация: +  853  -
Профиль   Отправить e-mail  

Замена слова в файле.

На awk можно преобразовать

[guest@localhost rep]$ ls
file.txt rep.awk
[guest@localhost rep]$ cat rep.awk
BEGIN {
state = 1
}
state == 1 {
state = 2
print
next
}
state == 2 {
state = 3
number = $2
sub(/[0-9]{5}/, "&|", number)
sub(/\|.*$/, "", number)
print
next
}
state == 3 {
state = 1
$2 = number
print
next
}
[guest@localhost rep]$
[guest@localhost rep]$ cat file.txt
M2 PATHFINDER
1 45727U 20037E 20188.86502194 +.00000000 +00000-0 00000-1 0 00000
2 00000 97.7019 8.5530 0011736 229.6833 130.3359 14.91194477 2752
GAOFEN DUOMO (GFDM)
1 45856U 20042A 20188.90426115 +.00000000 +00000-0 00000-1 0 00009
2 00000 98.0171 261.9010 0011999 250.8191 109.1719 14.76719764 552
BY70-2
1 45857U 20042B 20188.90566225 +.00000000 +00000-0 00000-1 0 00006
2 00000 98.0148 261.9000 0009995 238.0031 122.0206 14.76180781 465
STARLINK
1 45753U 20038Z 20188.58795034 +.00000000 +00000-0 00000-1 0 00007
2 00000 52.9969 182.6350 0002434 313.5831 46.4982 15.64270213 3179
[guest@localhost rep]$
[guest@localhost rep]$ awk -f rep.awk file.txt
M2 PATHFINDER
1 45727U 20037E 20188.86502194 +.00000000 +00000-0 00000-1 0 00000
2 45727 97.7019 8.5530 0011736 229.6833 130.3359 14.91194477 2752
GAOFEN DUOMO (GFDM)
1 45856U 20042A 20188.90426115 +.00000000 +00000-0 00000-1 0 00009
2 45856 98.0171 261.9010 0011999 250.8191 109.1719 14.76719764 552
BY70-2
1 45857U 20042B 20188.90566225 +.00000000 +00000-0 00000-1 0 00006
2 45857 98.0148 261.9000 0009995 238.0031 122.0206 14.76180781 465
STARLINK
1 45753U 20038Z 20188.58795034 +.00000000 +00000-0 00000-1 0 00007
2 45753 52.9969 182.6350 0002434 313.5831 46.4982 15.64270213 3179
[guest@localhost rep]$
[guest@localhost rep]$ awk -f rep.awk file.txt >out.txt
[guest@localhost rep]$
[guest@localhost rep]$ cat out.txt
M2 PATHFINDER
1 45727U 20037E 20188.86502194 +.00000000 +00000-0 00000-1 0 00000
2 45727 97.7019 8.5530 0011736 229.6833 130.3359 14.91194477 2752
GAOFEN DUOMO (GFDM)
1 45856U 20042A 20188.90426115 +.00000000 +00000-0 00000-1 0 00009
2 45856 98.0171 261.9010 0011999 250.8191 109.1719 14.76719764 552
BY70-2
1 45857U 20042B 20188.90566225 +.00000000 +00000-0 00000-1 0 00006
2 45857 98.0148 261.9000 0009995 238.0031 122.0206 14.76180781 465
STARLINK
1 45753U 20038Z 20188.58795034 +.00000000 +00000-0 00000-1 0 00007
2 45753 52.9969 182.6350 0002434 313.5831 46.4982 15.64270213 3179
[guest@localhost rep]$



Офлайн

#5 Фев. 3, 2021 13:28:44

Dmitriy_Z
Зарегистрирован: 2020-12-03
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Замена слова в файле.

py.user.next
На awk можно преобразовать
Изучаю питон, с AWK не знаком.

Офлайн

#6 Фев. 3, 2021 13:38:30

Dmitriy_Z
Зарегистрирован: 2020-12-03
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Замена слова в файле.

Dmitriy_Z
НУжно считывать и вторую строку чтобы из нее взять значение для замены “00000” в третьей строке.

Офлайн

#7 Фев. 3, 2021 22:37:18

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9880
Репутация: +  853  -
Профиль   Отправить e-mail  

Замена слова в файле.

Dmitriy_Z
Изучаю питон, с AWK не знаком.
Ну, это классическая программа в компьютерном мире, как и Sed. То есть для трансляции вот таких текстовых данных лучше изучить эти программы, им больше сорока лет. И вообще надо перейти на Linux, там эти все программы есть изначально, ничего не надо искать и доустанавливать.

А если тебе нужно на питоне, то можно и на питоне. Сам будешь делать? Или кто-нибудь на тебе, как на кошке, потренируется, попробует всё это сделать, а потом я покажу, как надо на самом деле это сделать, чтобы все мы потренировались?



Отредактировано py.user.next (Фев. 3, 2021 22:38:05)

Офлайн

#8 Фев. 4, 2021 08:17:04

Dmitriy_Z
Зарегистрирован: 2020-12-03
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Замена слова в файле.

py.user.next
давай лучше сразу результат. Если можно то с комментариями чтобы я мог сам разобраться.

Офлайн

#9 Фев. 4, 2021 08:45:04

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9880
Репутация: +  853  -
Профиль   Отправить e-mail  

Замена слова в файле.

Ну, новички пусть сначала попробуют свои силы.



Офлайн

#10 Фев. 4, 2021 11:49:40

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

Замена слова в файле.

 def one(fd):
    file = open(fd, 'r')
    try:
        while file:
            str1 = file.readline()
            str2 = file.readline()
            str3 = file.readline()
            tmp = str3.split(" ")
            if tmp[1] == "0"*5:
                tmp[1] = str2.split(" ")[1][:5]
                str3 = " ".join(tmp)
            yield str1
            yield str2
            yield str3
    except IndexError:
        print('Check up the entered data!!!')
    except Exception as err:
        print(err)
    file.close()
print(*one('in.txt'))
def two(seq, fd):
    file = open(fd, 'w')
    for i in seq:
        file.writelines(i)
    file.close()
two(one('in.txt'), 'out.txt')

ps чт сегодня туплю поэтому попросще



1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Отредактировано AD0DE412 (Фев. 4, 2021 12:11:12)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version