Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 21, 2015 01:06:01

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

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

py.user.next
А с чего вдруг я должен переносимый код подстраивать под винду?
Потому что ТС сидит на винде, ну и потому что он переносимый (и на винду тоже).
Кстати, если кто упростит вот это:
    elif isinstance(obj, UUID):
IF LINUX:
variant.u.IDVal[0] = obj.bytes[0]
variant.u.IDVal[1] = obj.bytes[1]
variant.u.IDVal[2] = obj.bytes[2]
variant.u.IDVal[3] = obj.bytes[3]
variant.u.IDVal[4] = obj.bytes[4]
variant.u.IDVal[5] = obj.bytes[5]
variant.u.IDVal[6] = obj.bytes[6]
variant.u.IDVal[7] = obj.bytes[7]
variant.u.IDVal[8] = obj.bytes[8]
variant.u.IDVal[9] = obj.bytes[9]
variant.u.IDVal[10] = obj.bytes[10]
variant.u.IDVal[11] = obj.bytes[11]
variant.u.IDVal[12] = obj.bytes[12]
variant.u.IDVal[13] = obj.bytes[13]
variant.u.IDVal[14] = obj.bytes[14]
variant.u.IDVal[15] = obj.bytes[15]
ELSE:
variant.u.IDVal.Data1 = obj.time_low
variant.u.IDVal.Data2 = obj.time_mid
variant.u.IDVal.Data3 = obj.time_hi_version
variant.u.IDVal.Data4[0] = obj.clock_seq_hi_variant
variant.u.IDVal.Data4[1] = obj.clock_seq_low
variant.u.IDVal.Data4[2] = (obj.node >> (5*8)) & 0xff
variant.u.IDVal.Data4[3] = (obj.node >> (4*8)) & 0xff
variant.u.IDVal.Data4[4] = (obj.node >> (3*8)) & 0xff
variant.u.IDVal.Data4[5] = (obj.node >> (2*8)) & 0xff
variant.u.IDVal.Data4[6] = (obj.node >> (1*8)) & 0xff
variant.u.IDVal.Data4[7] = obj.node & 0xff
variant.vt = VTYPE_CLSID
Буду благодарен.

Отредактировано Shaman (Авг. 21, 2015 01:09:32)

Офлайн

#2 Авг. 21, 2015 01:08:47

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

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

Shaman
ну и потому что он переносимый
То есть в лине file.doc и file.DOC будут считаться двумя одинаковыми файлами? Это с какого такого перепугу, а если там разный текст?



Офлайн

#3 Авг. 21, 2015 01:11:26

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

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

py.user.next
То есть в лине file.doc и file.DOC будут считаться двумя одинаковыми файлами? Это с какого такого перепугу, а если там разный текст?
Как будет угодно…

Офлайн

#4 Авг. 24, 2015 14:42:22

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

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

doza_and
Думаю будет как-то так:

Так не работает. Во первых жалуется:
NameError: name ‘time’ is not defined
Во вторых:
NameError: name ‘out_file’ is not defined

Как ему задать, что итоговый текстовый файл должен называться так же, как и оригинал?
Файлы уже лежат в каталоге с программой, а не в подпапке.

directory = os.getcwd()
files = os.listdir(directory)
print (files)
for i in files:
    word = win32com.client.gencache.EnsureDispatch("Word.Application")
    word.Visible = 0
    #time.sleep(1)
    word.Documents.Open(os.path.abspath(out_file))
    doc = word.Documents(word.ActiveDocument())
    with open(os.path.abspath(out_file)+".txt","w",encoding="utf-8") as f:
        f.write(doc.Content.Text)

Офлайн

#5 Авг. 25, 2015 00:01:57

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

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

Kir@
Как ему задать, что итоговый текстовый файл должен называться так же, как и оригинал?

Вы хотите затереть исходные файлы? Тогда так:
txt=doc.Content.Text
word.Close()# не помню точно как, но Word не даст писать в файл если word не закрыть.
with open(os.path.abspath(out_file),"w",encoding="utf-8") as f:
        f.write(txt)

Kir@
Так не работает.
Конечно. Это фрагмент из большого пакета. Я предполагал что вы понимаете как это модифицировать, а не ждете готового решения.

Правится просто
import time # это для задержки
out_file = "out_file.docx" # те имя файла который надо читать. Вам все равно надо делать кусок который будет подставлять разные имена

У меня это работало под 2.7 не факт что у вас запустится. Нужен естественно установленный ворд. Проверялось на 7,10,13 на других может не работать.



Отредактировано doza_and (Авг. 25, 2015 00:04:55)

Офлайн

#6 Авг. 25, 2015 05:32:03

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

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

doza_and, а если doc и docx документы открывать с помощью open office writer? Решение упростится? Что-то надо доставлять?
И вся задача осложняется тем, что приходится работать на маздайной оси.

Офлайн

#7 Авг. 25, 2015 17:02:13

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

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

Дело не в ОСИ а в переусложненном формате данных.

Сам глубоко в python uno не копал. Дело в том, что результаты открытия файлов меня в большинстве случаев не устраивали. (как Libreoffce так и вордом).

Помоему есть 2 варианта. Выложить на сервер документ “папу”, и все документы в проекте получать его редактированием. И всем пользователям договориться какую версию ворда они используют (тоже должна точно совпадать, включая номер билда)

Хранить документы в другом формате Latex,restructured text,odt. Если надо doc генерировать из них некоторой утилитой.

Чем раньше вы переведете документы doc в другой формат, тем проще потом будет жизнь.



Отредактировано doza_and (Авг. 25, 2015 17:03:56)

Офлайн

#8 Сен. 10, 2015 08:18:21

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

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

Я придумал третий вариант: т.к. имеется опыт работы с c#, то первый модуль на py копирует нужные документы, второй модуль (c#) сохраняет все полученные doc и docx в txt, третий модуль (py), используя regex, заканчивает задачу.
И все это запускается батником.
Да, месье знает толк в извращениях.

Офлайн

#9 Сен. 10, 2015 20:56:50

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

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

Kir@
второй модуль (c#)
Почему нет. Не думаю что это извращение. Приведите код на C# думаю на питоне он будет меньше по величине.
Интересно насколько быстро сохраняется текст в txt.
И осталось непонятно почему вы все не написали на C#.



Офлайн

#10 Сен. 11, 2015 03:55:45

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

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

doza_and
И осталось непонятно почему вы все не написали на C#.
Написал. Концепция бытия изменилась, ну и язык программирования вместе с ней

Копирование ~50 doc/docx файлов, последовательное извлечение из них определенного куска текста, подсчет слов в этом тексте и вывод в txt файл занимают ~3 минуты.

Код вышел не очень гибким, при подсчете именно словосочетаний возникают сбои, ну и от самого кода у меня волосы дыбом встают, там ~2К строк + гуй.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version