无法让python在OS X上读取我的.txt文件

时间:2013-03-11 09:15:43

标签: osx-snow-leopard python textedit

我正在尝试让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”后输入的错误:

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 个答案:

答案 0 :(得分:3)

您看到的错误意味着您的Python解释器尝试将文件加载为ASCII字符,但您尝试读取的文本文件是而不是ASCII编码。它可能是UTF-8编码的(在最近的OSX系统中是默认编码)。

将编码添加到open命令应该会更好:

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

另一种解决方法是,使用您的文件返回TextEdit,然后选择重复(或另存为 shift-cmd-S < / strong>)您可以再次保存文件,但这次选择ASCII编码。虽然如果不存在,您可能需要在编码选项列表中添加ASCII。

other question and accepted answer提供了有关选择正在阅读的文件的编码方式的更多想法。

答案 1 :(得分: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()]list comprehension。这是简短的版本:

for line in f:
   if line.strip(): # check for blank lines
       lines.append(line)

答案 2 :(得分:0)

textfile = "textfile.txt"

file = open(textfile, "r", encoding = "utf8")
read = file.read()
file.close()
print(read)

答案 3 :(得分: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)