Проблема, которая возникает у меня, следующая: Я создаю скрипт python, предназначенный для отображения файлов .doc (x) и .pdf которые находятся в указанном дереве каталогов и вернуть полную сумму своих страниц:Открытие файлов .doc (x) и .pdf с кириллическими именами в python 3.5.2
def allFiles():
page_count = 0
counter = 1
path = pathName()
f = open(path + '\\' + 'Spisak svih fajlova.txt', 'w')
f.write('Spisak fajlova: ' + '\n')
file_list = []
file_path = []
for folderName, subfolders, files in os.walk(path):
for filename in files:
if (filename.endswith('.doc') or filename.endswith('.docx') or filename.endswith('.pdf')):
file_list.append(filename)
file_path.append(os.path.join(folderName, filename))
print('\n' + 'Broj fajlova je: %g' % len(file_list) + '\n')
print(file_list)
print()
# print(file_path)
word = win32com.client.Dispatch('Word.Application')
for filename in file_path:
if filename.endswith('.pdf'):
pdf = PdfFileReader(open(filename, 'rb'))
num_pages = pdf.getNumPages()
page_count += num_pages
f.write('%g. ' % counter + os.path.basename(filename) + ',' + ' %g' % num_pages + ',' + '\n')
counter += 1
elif (filename.endswith('.doc') or filename.endswith('.docx')):
wordfile = word.Documents.Open(filename)
wordfile.Repaginate()
num_pages = wordfile.ComputeStatistics(2)
page_count += num_pages
wordfile.Close()
f.write('%g. ' % counter + os.path.basename(filename) + ',' + ' %g' % num_pages + ',' + '\n')
counter += 1
word.Quit()
f.write('\n' + 'Ukupan broj stranica je: %g' % page_count)
f.close()
print('\n' + 'Broj stranica je: %g' % page_count)
return page_count
скрипт делает свою работу красиво, пока я пытаюсь, чтобы он обработать файл с (сербском) кириллицей названия или не английский персонажи.
Ошибки я получаю:
Traceback (most recent call last):
File "broj_stranica_2.py", line 165, in <module>
result()
File "broj_stranica_2.py", line 160, in result
allFiles()
File "broj_stranica_2.py", line 122, in allFiles
print(file_list)
File "C:\Anaconda3\lib\encodings\cp852.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_map)[0]
UnicodeEncodeError: 'charmap' codec can't encode characters in position 2-10: character maps to <undefined>
Чтобы исправить это, я попытался ввода chcp 65001
команду в моем ЦМД и получил частично успешные результаты, как это решается вопрос о не-английский латинских символов. Далее я добавил # -*- encoding: utf-8 -*-
в начале скрипта, но безрезультатно. Затем я попытался добавить encription='utf8'
и 'rb'
для чтения двоичного кода (в оператор open для части .doc (x)), которая привела к той же ошибке. Попытка filename.decode(utf8)
дала мне ошибку «string has not decode property».
Вспомогательная функция Я использую, чтобы получить начальный путь является:
def pathName():
path = input('Unesi lokaciju fajlova: ')
return path
Питон версии я использую 3.5.2 (устанавливается с анаконда). Использование PyPDF2 для управления файлами .pdf и win32com для управления .doc (x).
Имена файлов, которые я пробовал обрабатывать, это «асдљњеѕџц.docx» и «љњегфдасд.pdf».
Возможный дубликат [Python, Unicode и консоли Windows] (http://stackoverflow.com/questions/5419/python-unicode-and-the-windows -консоль) – roeland