我正在尝试让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)
答案 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)