我是一名学生,正在努力学习Python,而且我很难将文件对象变成文本。这是我的代码:
def file2table(filename, mycaption=None):
with open(filename, 'r') as file:
return lists2table(file, mycaption)
def lists2table(mylists, mycaption=None):
result = '<table>\n'
if mycaption != None:
result += '<caption>' + mycaption + '</caption>\n'
result += list2THrow(mylists[0]) + '\n'
for item in mylists[1:]:
result += list2TDrow(item) + '\n'
result += '</table>'
return result
错误是:
result = '<table>\n<caption>Table with Forbes Top 50 Women</caption>\n', global list2THrow = <function list2THrow>, mylists = <_io.TextIOWrapper name='data/forbeswomen_ascii.tsv' mode='r' encoding='ANSI_X3.4-1968'>
TypeError: '_io.TextIOWrapper' object is not subscriptable
args = ("'_io.TextIOWrapper' object is not subscriptable",)
with_traceback = <built-in method with_traceback of TypeError object>
答案 0 :(得分:0)
这一行就在这里:
with open(filename, 'r') as file:
return lists2table(file, mycaption)
在这种情况下, file
是文件对象,而不是内容。要获取文本,您需要执行file.read()
答案 1 :(得分:0)
查看您的代码,您似乎想要创建一个包含文件条目的表。现在您将文件对象传递给函数lists2table
,然后您尝试将其下标为列表,这就是您的原因得到此错误。您可以尝试使用以下任何一种方法
def file2table(filename, mycaption=None):
with open(filename, 'r') as file:
return lists2table(file.readlines(), mycaption)
readlines()返回文件中的行列表。 或者您可以在函数
中传递文件对象def lists2table(mylists, mycaption=None):
result = '<table>\n'
mylists = mylists.read().split('\n')#this creates the desired list
if mycaption != None:
result += '<caption>' + mycaption + '</caption>\n'
result += list2THrow(mylists[0]) + '\n'
for item in mylists[1:]:
result += list2TDrow(item) + '\n'
result += '</table>'
return result