1

ファイル名を取り、単語の順序を変更して名前を変更するプログラムを作成しようとしています。ほとんどのファイルで正常に動作しますが、プログラムが動作しないファイル名に日本語の文字が含まれるファイルがいくつかあります。これは、文字を疑問符に変換し(印刷で確認しました)、ファイルに疑問符ではなく日本語の文字が含まれているため、ファイルが見つからないためだと思います。どうすればこれを回避できますか?

編集: はい、Windows を使用しています。

私のコードを再現したものが以下に掲載されています (私はこれにかなり慣れていないので、非常に非効率的で読みにくいかもしれません)。

import os

def Filenames(filelist):
    filenames = []
    for name in filelist:
        name = name.split(".") #Take off file extension
        filenames.append(name)
    return filenames

def ReformatName(directory):
    filelist = []
    name = []    

    filelist = os.listdir(directory)
    filenames = Filenames(filelist)

    for doc in filenames: #Docs are in form "Date Name Subject DocName", want to turn into "Subject DocName Date"
        doc1 = doc.split(" ")
        date = doc1[0]
        subject = doc1[2]
        docname = doc1[3]

        newdoc = "%s %s %s.docx" %(subject, docname, date)
        doc = ".".join(doc)
        os.rename(os.path.normpath(directory + os.sep + doc), os.path.normpath(directory + os.sep + newdoc))
4

1 に答える 1

1

Windows コンソールの問題に対する非常に複雑な解決策を見つけました。

# -*- coding: utf-8 -*-
import sys
import codecs

def setup_console(sys_enc="utf-8"):
    reload(sys)
    # Calling a system library function if we're using win32
    if sys.platform.startswith("win"):
        import ctypes
        enc = "cp%d" % ctypes.windll.kernel32.GetOEMCP() #TODO: check on win64/python64
    else:
        # It seems like for Linux everything already exists
        enc = (sys.stdout.encoding if sys.stdout.isatty() else
                    sys.stderr.encoding if sys.stderr.isatty() else
                        sys.getfilesystemencoding() or sys_enc)

    # Encoding for sys
    sys.setdefaultencoding(sys_enc)

    # Redefining standard output streams if they aren't redirected
    if sys.stdout.isatty() and sys.stdout.encoding != enc:
        sys.stdout = codecs.getwriter(enc)(sys.stdout, 'replace')

    if sys.stderr.isatty() and sys.stderr.encoding != enc:
        sys.stderr = codecs.getwriter(enc)(sys.stderr, 'replace')

出典: http://habrahabr.ru/post/117236/ (ロシア語のみ)

于 2013-04-21T21:31:31.947 に答える