Найти - Пользователи
Полная версия: Подсчет словосочетаний в файлах
Начало » Python для новичков » Подсчет словосочетаний в файлах
1 2 3 4 5 6 7
doza_and
Kir@
~3 минуты.
ОГО. Кошмар. Так это сейчас или раньше было?
Kir@
Это то, что есть на c#. Плюс глюки и нестабильность.
Kir@
Итак, 1 и 2 модуль я написал. Остался заключительный третий:
1. по очереди открыть все txt файлы в директории
2. найти текст “Первый\s+вопрос” и заменить текст отсюда и до конца:
s=re.sub(r'Первый(\s+)вопрос:',s).strip()
3. удалить все переносы:
s = re.sub(r'+', r' ', s).strip()
4. Во всех словах посчитать количество словосочетаний “Конский разрез”, “Яблонский карьер”.

Итак, часть 1:
txt_сzk=[]
l=os.listdir('ЦЗК')
for x in l:
    if x.endswith('txt'):  txt_сzk.append(x)
print (txt_сzk)

Часть 2:
for x in txt_сzk:
    s=re.sub(r'Первый(\s+)вопрос:',s).strip()
    s = re.sub(r'[\n]+', r' ', s).strip()

И тут у меня вопросы: как файл открыть, а потом его под тем же именем сохранить? Неделю копался в c#, из питона все забыл
doza_and
Тренируйте память. Хотя может это шарп мозги отшибает.
with open("xxx.dat","r",encoding="utf-8") as f:
   data=f.read()
with open("xxx.dat","w",encoding="utf-8") as f:
   f.write(data)
Kir@
Дубль 4. io.UnsupportedOperation: not readable.
def get_files_ext(source, exts):
    exts = tuple(exts)
    #print(exts)
    for root, dirs, files in os.walk(source):
        for name in files:
            if fnmatch.fnmatch(name, '*.txt'):
                yield os.path.join(root, name)
                 
def obrezka(seq, dest):
    for i in seq:
        #print(i)
        with open(i,'w') as f:
            data=f.read()
            print(data)
def main():
    source='ЦЗК'
    input_dir = 'ЦЗК'
    output_dir = 'ЦЗК'
    extensions = ('*.txt')
    files = get_files_ext(input_dir, extensions)
    obrezka(files, output_dir)
 
if __name__ == '__main__':
    main()
Kir@
Вот так выводит пустые строки, количество которых равно количеству файлов:
def get_files_ext(source, exts):
    exts = tuple(exts)
    for root, dirs, files in os.walk(source):
        for name in files:
            if fnmatch.fnmatch(name, '*.txt'):
                yield os.path.join(root, name)
                 
def copy_to_dir(seq, dest):
    for i in seq:
        with open(i,'r') as f:
            data=f.read()
            print(data)
        
def main():
    source='ЦЗК/'
    input_dir = 'ЦЗК/'
    output_dir = 'ЦЗК/'
    extensions = ('*.txt')
    files = get_files_ext(input_dir, extensions)
    copy_to_dir(files, output_dir)
 
if __name__ == '__main__':
    main()
Kir@
Пардоньте, нормально читается, просто как-то ухитрился все содержимое файликов потереть.
py.user.next
Kir@
extensions = ('*.txt')
Это, кстати, не кортеж, а просто строка в круглых скобках.
Kir@
Никак не могу удалить переносы строк:
ИА).
ПРОЕКТ РЕШЕНИЯ

data=f.read()
            data=re.sub(r'(Первый\s+вопрос[\A\a\Z\z\D\d]*)', r'', data).strip()
            data=re.sub(r'(\.[\s+\S+]ПРОЕКТ)', ' ', data).strip()
            data=' '.join(data.split())
            print(data)
Уже как только не извращался: \n, \r\n, и т.д. оставляет перенос(?) и все.
Kir@
Да и не надо уже удалять, считает мой код, но не суммирует:
        with open(i) as f:
            data=f.read()
            data=re.sub(r'(Первый\s+вопрос[\A\a\Z\z\D\d]*)', r'', data).strip()
            data=re.sub(r'(\.[\s+\S+]ПРОЕКТ)', ' ', data).strip()
            data=' '.join(data.split())
            pattern='ТЫЦ'
            string = data
            found = re.findall(pattern, string)
            len(found) == string.count(pattern)
            print(len(found))
Как его заставить сложить все полученные значения?
>>> 
1
1
5
5
0
3
3
2
1
2
>>>
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB