Найти - Пользователи
Полная версия: Подсчет словосочетаний в файлах
Начало » Python для новичков » Подсчет словосочетаний в файлах
1 2 3 4 5 6 7
Kir@
Здрям!

Пишу программу по подсчету количества словосочетаний в файлах.
Логика программы:
1. из трех папок скопировать по маске файлы *.doc и *.docx;
2. открыть каждый файл и скопировать текст от начала документа до волшебного слова в общий txt файл;
3. посчитать количество определенных словосочетаний в txt файле;
4. вывести результат на печать.

Итак, по порядку.

import codecs #Модуль для чтения в разных кодировках
#Чтение путей
f=open("name.txt", encoding = 'UTF-8')
#построчное чтение путей в переменные
czk=f.readline()
pdzk=f.readline()
kz=f.readline()
#проверка корректности чтения путей
print(czk)
print(pdzk)
print(kz)

А вот дальше затык - как скопировать файлы по маске? Написал так, а он не копирует
import glob
[shutil.copy(czk,ЦЗК) for filename in glob.glob('czk'+'\Проект*гы*.doc?')]

А не копирует потому что там еще есть вложенные папки, и в этих папках лежат нужные мне файлы
Подскажите, пожалуйста, как решить.
py.user.next
Через os.walk() нужно файлы искать.
Kir@
Ничего не показывает:

import os
for root, dirs, files in os.walk(czk):
    for name in files:
        print(os.path.join(root, name))
    for name in dirs:
        print(os.path.join(root, name))

Путь из переменной как-то иначе надо передавать?
Kir@
Кстати, путь у меня длинный, примерно такой:
\\трататата.тата\share\трататататата_тратаратарта\тыцтыц ЦЗК\2015\тыц 08_2015
py.user.next
Выполни
list(os.walk(czk))

Kir@
примерно такой
В ответ на несуществующий путь возвращается пустой генератор.

>>> for a, b, c, in os.walk('x'):
...   print(a, b, c)
... 
>>>

Скорее всего, в пути у тебя не проэкранированы бекслеши.
Kir@
Экранировал. Правда, путь пришлось непосредственно в программе прописать.
Как теперь к этому коду прикрутить маску “*.doc?”?

import os
for root, dirs, files in os.walk(czk):
    for name in files:
        print(os.path.join(root, name))
doza_and
Здрям!
py.user.next
Через os.walk() нужно файлы искать
Я бы в таком случае искал при помощи glob. Те создал для этих трех папок общую папку и переместил их туда. Или если их нельзя перемещать символьную ссылку на эти папки.

И дальше
import glob
for i in glob.glob("myfolder/*/*.doc?"):
   ....
Обратите внимание на слеши - они в другую сторону.
Пути вообще формируются при помощи os.path.join но для unix+windows этого достаточно.

Если ищете приключений на свою … то тогда пожалуйста используйте директории с русскими названиями, если нет то настоятельно не советую. Оно вам красным помечает….

Самая засада это пункт 2. Фиг вы чего сможете прочитать из doc или docx.
тут 3 пути
1. Если файлов 10 -20 проще ручками их сохранить в txt.
2. Если вам наплевать на doc то можно воспользоваться https://python-docx.readthedocs.org/en/latest/
3. Если надо все. То курите win32com + http://stackoverflow.com/questions/11470750/word-macro-save-as-text-w-current-file-name
Kir@
doza_and
Самая засада это пункт 2. Фиг вы чего сможете прочитать из doc или docx.
тут 3 пути
Т.е. вот такого фокуса, как в c#, не получится?
//Пихаем содержимое файла в textbox
                    Microsoft.Office.Interop.Word.Application word = new Microsoft.Office.Interop.Word.Application();
                    object miss = System.Reflection.Missing.Value;
                    object pathh = Path.Combine(direct + "\\" + fileName.ToString()); // путь;
                    object readOnly = true;
                    Microsoft.Office.Interop.Word.Document docs = word.Documents.Open(ref pathh, ref miss, ref readOnly, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss);
                    string totaltext = "";
                    for (int ii = 0; ii < docs.Paragraphs.Count; ii++)
                    {
                        totaltext += " \r\n " + docs.Paragraphs[ii + 1].Range.Text.ToString();
                    }
                    textBox1.Text = totaltext;
                    docs.Close();
                    word.Quit();
Я такую программу уже писал на c#, вот решил переделать, ибо работает криво и медленно.
Kir@
doza_and
Если ищете приключений на свою … то тогда пожалуйста используйте директории с русскими названиями, если нет то настоятельно не советую. Оно вам красным помечает….
Приключения уже нашли меня. Директории называются русскими буквами вперемешку с пробелам, цифрами и прочими еретическими знаками.
Kir@
doza_and
Обратите внимание на слеши - они в другую сторону.

Нихт арбайтен
for root, dirs, files in os.walk(czk):
    for name in files:
        for filename in glob.glob(czk+'\*.doc?'):
            print(filename)
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