2

IDLE で .txt ファイルを読み取ろうとしていますが、何らかの理由で読み取れません。学校でこれと同じことを試してみたところ、メモ帳付きの Windows コンピューターを使用すると問題なく動作しましたが、IDLE 付きの Mac を使用すると、.txt ファイルが読み取られません (または見つかりません)。

それらが同じフォルダー/ディレクトリにあり、ファイルがプレーンテキストでフォーマットされていることを確認しましたが、それでもエラーが発生します。私が使用していたコードは次のとおりです。

def loadwords(filename):

   f = open(filename, "r")
   print(f.read())
   f.close()
   return

filename = input("enter the filename: ")
loadwords(filename)

ファイル名「test.txt」を入力してEnterキーを押した後に表示されるエラーは次のとおりです。

Traceback (most recent call last):
  File "/Computer Sci/My programs/HW4.py", line 8, in <module>
    loadwords(filename)
  File "/Computer Sci/My programs/HW4.py", line 4, in loadwords
    print(f.read())
  File "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/encodings/ascii.py", line 26, in decode
    return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xff in position 0: ordinal not in range(128)
4

4 に答える 4

3

表示されるエラーは、Python インタープリターがファイルを ASCII 文字として読み込もうとしたが、読み込もうとしているテキスト ファイルがASCII エンコードされていないことを意味します。おそらくUTF-8でエンコードされています(最近のOSXシステムのデフォルト)。

コマンドにエンコーディングを追加すると、より適切に機能するopenはずです。

f = open(filename, "r" "utf8")

それを修正する別の方法は、ファイルを使用して TextEdit に戻り、[複製] (または[ shift-cmd-S ]として保存 ) を選択して、ファイルを再度保存できるようにすることですが、今回は ASCII エンコーディングを選択します。存在しない場合は、encodings オプション リストに ASCII を追加する必要があるかもしれません。

この他の質問と受け入れられた回答は、読んでいるファイルのエンコーディングを選択する方法について、さらにいくつかの考えを提供します。

于 2013-03-11T10:07:40.350 に答える
1

適切なエンコーディングでファイルを開く必要があります。また、メソッドから何かを返す必要があります。そうしないと、ファイルに対して何もできなくなります。

このバージョンを試してください:

def loadwords(filename):
    with open(filename, 'r', encoding='utf8') as f:
         lines = [line for line in f if line.strip()]
    return lines

filename = input('Enter the filename: ')
file_lines = loadwords(filename)

for eachline in file_lines:
    print('The line is {}'.format(eachline))

この行[line for line in f if line.strip()]リスト内包です。これは、次の短いバージョンです。

for line in f:
   if line.strip(): # check for blank lines
       lines.append(line)
于 2013-03-11T10:29:55.493 に答える
0

このエンコーディングの制限は、python バージョン 2.* に限定されていました。

MAC が Python バージョン 3.* を実行している場合、txt ファイルをエンコードするために余分なエンコード部分を追加する必要はありません。

以下の関数は、編集なしで python 3 で直接実行されます。

def loadwords(filename):
f = open(filename, "r")
print(f.read())
f.close()
return
filename = input("enter the filename: ")
loadwords(filename)
于 2016-03-26T20:32:50.710 に答える
0

textfile = "textfile.txt"

file = open(textfile, "r", encoding = "utf8")
read = file.read()
file.close()
print(read)
于 2015-07-11T19:30:05.090 に答える