1. ホーム
  2. python

[解決済み] Pythonでファイルから文字を読み込む

2022-10-04 09:14:10

質問

テキストファイルの中に、"I don't like this"という文字列があります。

しかし、これを文字列に読み込むと、"I donxe2x80**t like this"になります。となってしまうのです。私は

f1 = open (file1, "r")
text = f1.read()

コマンドで読み込みを行います。

さて、文字列を読み込むときに、"I donxe2x80x98t like this like this"ではなく、"I don't like this"となるような読み方は可能でしょうか。

2番目の編集:この問題を解決するためにマッピングを使う人を見たことがありますが、本当に、この種のANSIからunicode(およびその逆)への変換を行う組み込みの変換はないのでしょうか?

どのように解決するのですか?

参考 http://docs.python.org/howto/unicode

したがって、ファイルから Unicode を読み取ることは簡単です。

import codecs
with codecs.open('unicode.rst', encoding='utf-8') as f:
    for line in f:
        print repr(line)

また、ファイルを更新モードで開き、読み込みと書き込みの両方を可能にすることもできます。

with codecs.open('test', encoding='utf-8', mode='w+') as f:
    f.write(u'\u4500 blah blah blah\n')
    f.seek(0)
    print repr(f.readline()[:1])

EDIT : あなたの意図するゴールは、Pythonでファイルを文字列に正しく読み込むことができるだけだと仮定しています。もしあなたが Unicode から ASCII 文字列に変換しようとしているなら、Unicode 文字が必ずしも ASCII に存在するとは限らないので、それを行う直接的な方法はありません。

ASCII文字列に変換しようとしている場合、次のいずれかを試してみてください。

  1. この特定の例のようないくつかの特殊なケースを処理したいだけであれば、特定の unicode 文字を同等の ASCII 文字に置き換えます。

  2. を使用します。 unicodedata モジュールの normalize()string.encode() メソッドを使用して、次に近い ASCII 等価物にできる限り変換します (Ref. https://web.archive.org/web/20090228203858/http://techxplorer.com/2006/07/18/converting-unicode-to-ascii-using-python ):

    >>> teststr
    u'I don\xe2\x80\x98t like this'
    >>> unicodedata.normalize('NFKD', teststr).encode('ascii', 'ignore')
    'I donat like this'