С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.97/29: Рейтинг темы: голосов - 29, средняя оценка - 4.97
 Аватар для Илья Рогулин
6 / 6 / 3
Регистрация: 07.01.2012
Сообщений: 66

Как искать слово в нескольких файлах?

10.12.2013, 12:18. Показов 6452. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Нужна помощь в реализации задачи поиска в папке, состоящей из 10 файлов, определенного слова, перебор ведется в каждом файле.

Вот код поиска в одном файле и вывод на экран информации. Нужно сделать так же, только добавить на вывод имя файла + не могу понять как в цикле сделать открытие файлов из папки

Код
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
class find:
        b = []
        c = ''
        MyFile = ''
        def __init__(self, string = ' '):
                self.c = string
        def find_string(self):
                f = self.open_file('files/1.txt')
                if f:
                        for line in self.MyFile:
                                self.b.append(line)
                        self.print_string() 
        def print_string(self):
                j = 0
                for i in self.b:
                        j += 1
                        if self.c in i:
                                print 'Слово найдено в строке %s' % j
        def open_file(self, s = ''):
                if os.path.exists(s):
                        self.MyFile = open(s,'r')
                        f = True
                        return f
                else:
                        print 'Файла не существует! Для начала проверьте файл в каталоге.'
                        f = False
                MyFile.close()
 
def find_str(t):      
        a = find(t)
        a.find_string()
        
t = raw_input()
find_str(t)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.12.2013, 12:18
Ответы с готовыми решениями:

Как искать строку в файлах?
Обеспечить возможность поиска заданной строки: а) во всех файлах текущей директории б) во всех файлах по всей файловой системе...

Как искать последовательность байтов в файлах большого размера
Как искать последовательность байтов в файлах большого размера? (может достигать несколько гигабайт) Нужны позиции всех совпадений.

Программа ищет слово в файле. Как искать слово по центральной части?
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_LENGTH void main() {

8
 Аватар для ilnurgi
141 / 141 / 38
Регистрация: 20.02.2012
Сообщений: 597
10.12.2013, 15:51
1. имена классов пишутся с заглавной
2. имена переменных с маленькой
3. с первого взгляда код кажется не рабочий
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
10.12.2013, 20:38
Цитата Сообщение от Илья Рогулин Посмотреть сообщение
как в цикле сделать открытие файлов из папки
для начала
find -> Finder

нужно в Finder добавить имя файла, то есть он должен получать файл и строку
а потом просто перебираешь имена и создаёшь для них объекты типа Finder
1
Z3JheSBoYXQ=
 Аватар для fanatdebian
342 / 237 / 83
Регистрация: 08.07.2012
Сообщений: 577
10.12.2013, 21:29
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
35
#!/usr/bin/env python
#coding: utf-8
 
import os
 
class CheckedFiles:
  def __init__(self, path, word):
    self.word = word
    self.path = path
    self.result = self.FileList()
    self.totalfound = self.FindWord()
  def FileList(self):
    if not  os.access(self.path, os.R_OK):
      print "{p} not have access for reading files. Abort\n".format(p=self.path)
    else:
      print "{p} have access for reading files".format(p=self.path)
      return filter(lambda x: os.stat(x).st_size>0 and os.path.isfile(x), os.listdir(self.path))
  def FindWord(self):
    self.totalfound = {}
    for current in self.result:
      tmp = []
      for number, line in enumerate(open(current),1):
        if  self.word in line.split(' '):
           tmp.append(number)
      if len(tmp):
        self.totalfound[current] = tmp
  def Viewresult(self):
    for fname in self.totalfound:
      print fname, self.totalfound[fname]
 
 
word = "really"
c=CheckedFiles(os.curdir, word)
c.FindWord()
c.Viewresult()
1
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
10.12.2013, 22:57
Цитата Сообщение от fanatdebian Посмотреть сообщение
Python
1
class CheckedFiles:
правильно назван (в плане регистра)

Цитата Сообщение от fanatdebian Посмотреть сообщение
Python
1
  def FileList(self):
неправильно назван (в плане регистра)
методы, как и любые функции, принято именовать в виде file_list

это чтобы в коде сразу легко отличать классы и функции, то есть повышает читаемость
1
 Аватар для Илья Рогулин
6 / 6 / 3
Регистрация: 07.01.2012
Сообщений: 66
10.12.2013, 23:12  [ТС]
Цитата Сообщение от ilnurgi Посмотреть сообщение
1. имена классов пишутся с заглавной
2. имена переменных с маленькой
3. с первого взгляда код кажется не рабочий
это потому что я не скопировал import os, в самом начале, а так все работает.

Добавлено через 2 минуты
Цитата Сообщение от fanatdebian Посмотреть сообщение
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
35
#!/usr/bin/env python
#coding: utf-8
 
import os
 
class CheckedFiles:
  def __init__(self, path, word):
    self.word = word
    self.path = path
    self.result = self.FileList()
    self.totalfound = self.FindWord()
  def FileList(self):
    if not  os.access(self.path, os.R_OK):
      print "{p} not have access for reading files. Abort\n".format(p=self.path)
    else:
      print "{p} have access for reading files".format(p=self.path)
      return filter(lambda x: os.stat(x).st_size>0 and os.path.isfile(x), os.listdir(self.path))
  def FindWord(self):
    self.totalfound = {}
    for current in self.result:
      tmp = []
      for number, line in enumerate(open(current),1):
        if  self.word in line.split(' '):
           tmp.append(number)
      if len(tmp):
        self.totalfound[current] = tmp
  def Viewresult(self):
    for fname in self.totalfound:
      print fname, self.totalfound[fname]
 
 
word = "really"
c=CheckedFiles(os.curdir, word)
c.FindWord()
c.Viewresult()
Вы не скажете мне, где прописывать путь к файлу?
0
Z3JheSBoYXQ=
 Аватар для fanatdebian
342 / 237 / 83
Регистрация: 08.07.2012
Сообщений: 577
11.12.2013, 01:04
Цитата Сообщение от Илья Рогулин Посмотреть сообщение
это потому что я не скопировал import os, в самом начале, а так все работает.

Добавлено через 2 минуты


Вы не скажете мне, где прописывать путь к файлу?
Python
1
2
3
4
5
6
7
8
9
10
word = "really" # искомое слово
some_path = "/mnt/somedir/"
c=CheckedFiles(some_path, word)
c.FindWord()
c.Viewresult()
 
или просто 
с = CheckedFiles("/mnt/somedir", "really") 
c.FindWord()
c.Viewresult()
1
 Аватар для ilnurgi
141 / 141 / 38
Регистрация: 20.02.2012
Сообщений: 597
11.12.2013, 07:25
Цитата Сообщение от Илья Рогулин Посмотреть сообщение
Python
1
MyFile.close()
а вот это что такое?
попробуйте попасть в блок
Python
1
2
print 'Файла не существует! Для начала проверьте файл в каталоге.'
                        f = False
и у вас все упадет
0
 Аватар для Илья Рогулин
6 / 6 / 3
Регистрация: 07.01.2012
Сообщений: 66
11.12.2013, 08:25  [ТС]
Цитата Сообщение от fanatdebian Посмотреть сообщение
Python
1
2
3
4
5
6
7
8
9
10
word = "really" # искомое слово
some_path = "/mnt/somedir/"
c=CheckedFiles(some_path, word)
c.FindWord()
c.Viewresult()
 
или просто 
с = CheckedFiles("/mnt/somedir", "really") 
c.FindWord()
c.Viewresult()
Code
1
WindowsError: [Error 2] : '1.txt'
вот такая ошибка выходит, к сожалению. но спасибо на затраченное время.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.12.2013, 08:25
Помогаю со студенческими работами здесь

Как регуляркой искать в нескольких строках?
дано: В результате найти то, что выделено жирным: Проблема в том, что находит: Object test1 без остальных строк до...

Как искать определенное слово именно в строке?
Здравствуйте Как искать определенное слово именно в строке номер которого я сам укажу, а не во всем тексте. Под словом строка имею виду...

Как искать определенное слово в ValueListEditor1 и как добавить новый столбик key и value?
драстуйте кто работал ValueListEditorom ? мне нужно искать слово в ValueListEditor1 по нажатию кнопки? и как добавить новый столбик в...

Как изменять переменную в нескольких файлах
Доброго времени суток! Извиняюсь, что название темы может некорректно написал. Не могу разобраться с задачей. Может поможете. Есть...

Как настроить Index Server чтобы была возможность искать в нескольких сайтах?
На WEB сервере есть несколько виртуальных каталогов, как настроить Index Server чтобы была возможность искать в каждом отдельно. А то он...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru