Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/22: Рейтинг темы: голосов - 22, средняя оценка - 4.59
0 / 0 / 0
Регистрация: 19.12.2012
Сообщений: 3

Поиск в тексте

19.12.2012, 19:42. Показов 4591. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
Подскажите как на питоне сделать скрипт задача которого в следующем:
Нужно взять текстовый документ и по очереди проверить каждую строку на наличие слова grp ,если это слово присутствует, то нужно дописать последующие 6 строк (с учетом строки с grp) в другой текстовый файл, если отсутствует, то пропустить!?!
Заранее всем спасибо!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.12.2012, 19:42
Ответы с готовыми решениями:

Поиск в тексте DOC-файлов последовательностей символов по шаблону и поиск найденных в TXT-файле (с логом)
Уважаемые программисты! Очень нужен bat-файл или скрипт, который решает такую задачу: 1. Осуществляет поиск в тексте массива...

Поиск в тексте
Как сделать так чтобы ввести название например: Name123 и полный текст в txt файле нашёл и вывел это в консоль?

Поиск в тексте
Доброго времени суток уважаемые форумчане !!! Подскажите как на питоне сделать скрипт задача которого в следующем: Нужно взять...

7
0 / 0 / 0
Регистрация: 14.05.2012
Сообщений: 18
19.12.2012, 20:04
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
dirFirst = input("please enter file to open")
dirSec = input("please enter file to write")
fh1 = open(dirFirst)
fh2 = open(dirSec, 'w')
n = 0
for lino, line in enumerate(fh1, start=1):
    if "grp" in line:
        n = 6
    if n:
        fh2.write(line)
        n -= 1
fh1.close()
fh2.close()
Только эта программа _один_ раз будет записывать каждую строку. Т.е. если встретится в текстовом файле что-то типа

grp
sdsf
asdf
grp
asdf

то во второй файл запишется точную копию, а не

grp
sdsf
asdf
grp
asdf
grp
asdf
0
0 / 0 / 0
Регистрация: 19.12.2012
Сообщений: 3
19.12.2012, 20:34  [ТС]
Воспользовался вашим файлом.

У меня на выходе получается

grp;flux1/cm2c;stotal
grp;flux1/cm2c;stotal
grp;flux1/cm2c;stotal
grp;flux1/cm2c;stotal
grp;flux1/cm2c;stotal
grp;flux1/cm2c;stotal

т.е. 6 одинаковых строчек, а требуется чтобы выводились 6 строчек после строки grp;flux1/cm2c;stotal

Пример:
grp
1
2
3
4
5
6
sf
fd
as

Нужно чтобы в другой файл скопировалось
grp
1
2
3
4
5

а все остальное отбросилось, при этом в файле grp встречаются не сколько раз

Спасибо, что стараетесь помочь
0
0 / 0 / 0
Регистрация: 14.05.2012
Сообщений: 18
19.12.2012, 22:27
Цитата Сообщение от Visual13 Посмотреть сообщение
Пример:
grp
1
2
3
4
5
6
sf
fd
as

Нужно чтобы в другой файл скопировалось
grp
1
2
3
4
5
Странно, у меня именно так и работает. Создал файл с таким же содержимом, и программа мне создала файл с
grp
1
2
3
4
5
Смысл программы в том, что она копирует в другой файл только в том случае, если grp встретилось не более 6 строк назад (за это отвечает счетчик n) и уменьшает его. Даже не знаю, что тут может не работать

Было бы проще отредактировать, если бы был нужный файл. или хотя бы его кусок
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
20.12.2012, 02:42
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
#!/usr/bin/env python3
 
ifname = 'file.txt'
ofname = 'output.txt'
srchword = 'grp'
 
with open(ifname, encoding='utf-8') as fin, \
     open(ofname, 'w', encoding='utf-8') as fout:
    lines = tuple(fin)
    
    state = 'normal'
    i = 0
    length = len(lines)
    while i < length:
        line = lines[i]
        if state == 'normal':
            if srchword in line.split():
                count = 0
                i -= 1
                state = 'write'
        elif state == 'write':
            if count < 6:
                fout.write(line)
                count += 1
            else:
                state = 'normal'
                i -= 1
        i += 1
 
print('ok')
Code
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
35
36
37
[guest@localhost copywrd]$ ./copywrd.py
ok
[guest@localhost copywrd]$ cat file.txt 
grp
1
2
3
4
5
6
sf
fd
as
grp
1
2
3
4
5
6
sf
fd
as
[guest@localhost copywrd]$ cat output.txt 
grp
1
2
3
4
5
grp
1
2
3
4
5
[guest@localhost copywrd]$
0
0 / 0 / 0
Регистрация: 19.12.2012
Сообщений: 3
20.12.2012, 17:26  [ТС]
accept, я новичок в работе с pythone и ваш код для меня слишком сложен. К сожалению даже запустить не удалось.


ShiGarus, смотрите я не много модернизировал код:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import os
import sys
import re
 
os.chdir("I:\\")
content = open('1_6.txt', 'r').read().split(' ')
fh2 = open("output.txt", 'w')
n = 0
for lino, line in enumerate(content, start=1):
    if "grp" in line:
        n = 6
    if n:
        fh2.write(line)
        n -= 1
fh2.close()
Задание состоит в чем: из файла 1_6.txt нужно вытащить 3 строки находящиеся после строки grp.

Т.е. выглядеть это должно вот так:

grp ;flux 1/cm2c ; stotal ; sabs ; sfis. ; nu$sfis. ; Dtr ; Fboundary ; Str
1; 0.54344182E-04; 0.38278341 ; 0.93178187E-05; 0.0000000 ; 0.0000000 ; 0.96905243 ; 0.60866594E-04; 0.35968545 ; 0.13080662E+13; 0.13504220E-01; 0.00000E+00;
2; 0.17381960E-03; 0.40805319 ; 0.15364469E-03; 0.0000000 ; 0.0000000 ; 0.83968633 ; 0.16684140E-03; 0.39890480 ; 0.80762849E+13; 0.13643533 ; 0.00000E+00;

grp ;flux 1/cm2c ; stotal ; sabs ; sfis. ; nu$sfis. ; Dtr ; Fboundary ; Str
1; 0.24963620E-04; 0.39145750 ; 0.99084409E-05; 0.0000000 ; 0.0000000 ; 0.92358953 ; 0.29099550E-04; 0.36858147 ; 0.88934479E+15; 0.13504220E-01; 0.00000E+00;
2; 0.13734592E-03; 0.40823442 ; 0.15499537E-03; 0.0000000 ; 0.0000000 ; 0.83895689 ; 0.13339552E-03; 0.39927343 ; 0.18079366 ; 0.13643533 ; 0.00000E+00;

и т.д.

Сам файл 1_6.txt прикрепил, пришлось его положить в архив, т.к. он весит больше 20кб
Вложения
Тип файла: rar 1_6.rar (8.0 Кб, 2 просмотров)
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
21.12.2012, 01:49
Цитата Сообщение от Visual13 Посмотреть сообщение
К сожалению даже запустить не удалось.
это код для python 3.3.0
0
0 / 0 / 0
Регистрация: 14.05.2012
Сообщений: 18
21.12.2012, 04:41
У меня не заработал верно ваш код. Из-за метода к открытию файла <<.read().split(' ')>>. Он же делит весь файл на отдельные слова, заместо строчек, и соответственно в результате получается файл со строками типа
grp;flux1/cm2c;stotal
ведь это как раз 6 слов из вашего файла начиная с grp. Я удалил этот метод и все заработало. Результат прикреплен, он одинаков для моей и измененной вашей программы.
А чтобы запустить версию, предложенную accept, необходимо удалить из строчек открытия файлов параметр encoding = "utf-8", в 2.* этот параметр не введен.
Вложения
Тип файла: rar output.rar (1.4 Кб, 5 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.12.2012, 04:41
Помогаю со студенческими работами здесь

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

Поиск в тексте
Есть код программы, надо его переделать так, чтобы шаг поиска в тексте был равен именно тому количеству символов, которые введены в edit1,...

Поиск в тексте
Я нашел его в Интернете Библии фото о том, Например Бог искать получить ответ,как нужно найти слово.? примерно мне нужно помочь ...

Поиск в тексте.
надо отделить числы вместе знаками... написал эту, но не помогло procedure TForm1.Button1Click(Sender: TObject); var m,s:string; ...

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Киев стоит - украинская песня
zorxor 28.01.2026
wfWdiRqdTxc О Господи, Вечный, Ты . . . Я помоги, Бесконечный. . . Я прошу Ты. . . Я погибаю, спаси. . . Я прошу Тебя Вечный. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru