2017-01-30 3 views
0

私が抱えている問題は以下の通りです: .doc(x)と.pdfファイルをリストするためのpythonスクリプトを作っています指定されたディレクトリツリーに存在し、そのページの合計を返している:pythonでキリル文字の付いた.doc(x)と.pdfファイルを開く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 

私はそれが(セルビア)を持つファイルを処理持つようにしようとするまでスクリプトが美しく、その仕事をしていませんキリル文字、タイトルまたは非英語文字。

私が得るエラーは次のようになります。これを修正するために、私は私のCMDにchcp 65001コマンドを入力

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> 

を試してみましたし、それが英語以外のラテン文字の問題を解決して、部分的に成功した結果を得ました。 次に、スクリプトの最初に# -*- encoding: utf-8 -*-を追加しましたが、役に立たなくなりました。 その後、同じエラーが発生したreadバイナリ(.doc(x)部分のopen文)にencription='utf8''rb'を追加しようとしました。 filename.decode(utf8)を試してみると、「文字列にはデコードプロパティがありません」というエラーが表示されました。

私は、最初のパスを取得するために使用していヘルパー関数です:私が使用しているPythonのバージョンは(アナコンダとともにインストールされる)3.5.2です

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

。 PyPDF2を使用して.pdfファイルとwin32comを操作して.doc(x)を操作する。

処理しようとしたファイルの名前は「асдљњеѕџц.docx」と「љњегфдасд.pdf」です。

+0

可能性の重複[Pythonの、ユニコード、およびWindowsコンソール]をhttp://stackoverflow.com/questions/5419/python-unicode-and-the-windows -コンソール) – roeland

答えて

1

回答はから、@roelandと答え、@ J.Fによって答えが出ました。セバスチャン、ありがとう。

問題は実際にはファイルを開くことではなく、printステートメントでコンソールに名前を印刷することでした。

しかし、コンソールに印刷する必要がある場合、私にとってはwin-unicode-consoleモジュールを使用していました。 単にそれをインポートしてそれを有効にします(

import win_unicode_console 
win_unicode_console.enable() 
関連する問題