Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 20, 2015 08:12:46

Kir@
Зарегистрирован: 2015-08-13
Сообщения: 124
Репутация: +  0  -
Профиль   Отправить e-mail  

Подсчет словосочетаний в файлах

Здрям!

Пишу программу по подсчету количества словосочетаний в файлах.
Логика программы:
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?')]

А не копирует потому что там еще есть вложенные папки, и в этих папках лежат нужные мне файлы
Подскажите, пожалуйста, как решить.

Отредактировано Kir@ (Авг. 20, 2015 08:13:09)

Офлайн

#2 Авг. 20, 2015 08:45:14

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

Подсчет словосочетаний в файлах

Через os.walk() нужно файлы искать.



Офлайн

#3 Авг. 20, 2015 09:05:16

Kir@
Зарегистрирован: 2015-08-13
Сообщения: 124
Репутация: +  0  -
Профиль   Отправить e-mail  

Подсчет словосочетаний в файлах

Ничего не показывает:

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))

Путь из переменной как-то иначе надо передавать?

Офлайн

#4 Авг. 20, 2015 09:13:52

Kir@
Зарегистрирован: 2015-08-13
Сообщения: 124
Репутация: +  0  -
Профиль   Отправить e-mail  

Подсчет словосочетаний в файлах

Кстати, путь у меня длинный, примерно такой:
\\трататата.тата\share\трататататата_тратаратарта\тыцтыц ЦЗК\2015\тыц 08_2015

Офлайн

#5 Авг. 20, 2015 09:40:53

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

Подсчет словосочетаний в файлах

Выполни

list(os.walk(czk))

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

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

Скорее всего, в пути у тебя не проэкранированы бекслеши.



Отредактировано py.user.next (Авг. 20, 2015 09:41:42)

Офлайн

#6 Авг. 20, 2015 10:24:06

Kir@
Зарегистрирован: 2015-08-13
Сообщения: 124
Репутация: +  0  -
Профиль   Отправить e-mail  

Подсчет словосочетаний в файлах

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

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

Офлайн

#7 Авг. 20, 2015 10:42:58

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Подсчет словосочетаний в файлах

Здрям!

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



Офлайн

#8 Авг. 20, 2015 10:47:31

Kir@
Зарегистрирован: 2015-08-13
Сообщения: 124
Репутация: +  0  -
Профиль   Отправить e-mail  

Подсчет словосочетаний в файлах

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@ (Авг. 20, 2015 10:48:14)

Офлайн

#9 Авг. 20, 2015 10:50:59

Kir@
Зарегистрирован: 2015-08-13
Сообщения: 124
Репутация: +  0  -
Профиль   Отправить e-mail  

Подсчет словосочетаний в файлах

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

Офлайн

#10 Авг. 20, 2015 11:05:05

Kir@
Зарегистрирован: 2015-08-13
Сообщения: 124
Репутация: +  0  -
Профиль   Отправить e-mail  

Подсчет словосочетаний в файлах

doza_and
Обратите внимание на слеши - они в другую сторону.

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

Отредактировано Kir@ (Авг. 20, 2015 11:06:41)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version