从文件对象Python中获取文本

时间:2015-04-19 21:34:32

标签: python

我是一名学生,正在努力学习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>

2 个答案:

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