【问题标题】:Opening .doc(x) and .pdf files with cyrillic names in python 3.5.2在 python 3.5.2 中打开带有西里尔字母名称的 .doc(x) 和 .pdf 文件
【发布时间】:2017-01-30 23:24:25
【问题描述】:

我遇到的问题如下: 我正在制作一个 python 脚本,旨在列出在指定目录树中找到的 .doc(x) 和 .pdf 文件并返回它们的页面总和:

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>

为了解决这个问题,我尝试在我的 cmd 中输入 chcp 65001 命令并获得部分成功的结果,因为它解决了非英语拉丁字符的问题。 接下来,我在脚本开头添加了# -*- encoding: utf-8 -*-,但无济于事。 然后我尝试添加encription='utf8''rb' 用于读取二进制文件(添加到.doc(x) 部分的open 语句中),这导致了相同的错误。尝试filename.decode(utf8) 给了我“字符串没有解码属性”错误。

我用来获取初始路径的辅助函数是:

def pathName():
path = input('Unesi lokaciju fajlova: ')
return path

我使用的 Python 版本是 3.5.2(与 anaconda 一起安装)。 使用 PyPDF2 操作 .pdf 文件,使用 win32com 操作 .doc(x)。

我尝试处理的文件的名称是“асдљњеѕџц.docx”和“љњегфдасд.pdf”。

【问题讨论】:

标签: python pdf unicode utf-8 ms-word


【解决方案1】:

答案来自Python, Unicode, and the Windows console,由@roeland 标记,由@J.F. 回答。塞巴斯蒂安,谢谢:)。

问题不在于打开文件,而在于打印语句,在控制台中打印它的名称。

但是,如果您确实需要将其打印到控制台,那么对我有用的是使用 win-unicode-console 模块。 只需导入它并通过以下方式启用它:

import win_unicode_console
win_unicode_console.enable()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-17
    相关资源
    最近更新 更多