web-dev-qa-db-ja.com

TypeError: '_io.TextIOWrapper'オブジェクトは下付きではありません

タイトルが言うようにエラーを取得します。これがトレースバックです。 lst [x]がこの問題の原因であることはわかっていますが、この問題の解決方法はわかりません。私はすでにgoogle + stackoverflowを検索しましたが、探している解決策が見つかりませんでした。

Traceback (most recent call last):
File "C:/Users/honte_000/PycharmProjects/Comp Sci/2015/2015/storelocation.py", line 30, in <module>
main()
File "C:/Users/honte_000/PycharmProjects/Comp Sci/2015/2015/storelocation.py", line 28, in main
print(medianStrat(lst))
File "C:/Users/honte_000/PycharmProjects/Comp Sci/2015/2015/storelocation.py", line 24, in medianStrat
return lst[x]
TypeError: '_io.TextIOWrapper' object is not subscriptable

これが実際のコードです

def medianStrat(lst):
    count = 0
    test = []
    for line in lst:
        test += line.split()
        for i in lst:
            count = count +1
            if count % 2 == 0:
                x = count//2
                y = lst[x]
                z = lst[x-1]
                median = (y + z)/2
                return median
            if count %2 == 1:
                x = (count-1)//2
                return lst[x]     # Where the problem persists

def main():
    lst = open(input("Input file name: "), "r")
    print(medianStrat(lst))

では、この問題の解決策は何でしょうか、それともコードを機能させるために代わりに何ができるでしょうか? (コードが行うべき主な機能は、ファイルを開いて中央値を取得することです)

8
Eric

インデックスを作成することはできません(__getitem___io.TextIOWrapperオブジェクト。あなたができることは、list行を操作することです。あなたのコードでこれを試してください:

lst = open(input("Input file name: "), "r").readlines()

また、あなたはfileオブジェクトを閉じていません。これはより良いでしょう:

with open(input("Input file name: ", "r") as lst:
    print(medianStrat(lst.readlines()))

withはファイルが確実に閉じられるようにします。 docs を参照してください

7
Robin Curbelo