-2

(また初歩的な質問です)

複数のtxtファイルから値を含む複数のリストを抽出する必要があります(各ファイルから2つのリスト)。必要な値を抽出する関数を作成しましたが、元のファイルの名前が含まれるようにリストに名前を付ける方法がわかりません。例えば:

ファイル名+' '+測定値 ファイル名+' '+日付

最初の問題は、これらの名前が文字列であることです。リストの名前に変換する方法がわかりません。

2 つ目の問題は、これを関数に組み込むと、名前がグローバルではなくなり、後でリストにアクセスできなくなることです。変数名の前にglobalと書くとエラーになります。

def open_catch_down ():

    file = raw_input('Give the name of the file:')

    infile = open(file,'r')
    lines = infile.readlines()
    infile.close()

    global dates
    global values
    dates = []
    values = []


    import datetime

    for line in lines[1:]:
        words = line.split()
        year = int(words[0])
        month = int(words[1])
        day = int(words[2])
        hour = int(words[3])
        minute = int(words[4])
        second = int(words[5])
        date = datetime.datetime(year,month,day,hour,minute,second)
        dates.append(date)
        value = float(words[6])
        values.append(value)  

    vars()[file + '_' + 'values'] = values


open_catch_down ()

print vars()[file + '_' + 'values']

次に、エラーが発生します。

print vars()[file + '_' + 'values']

TypeError: + のサポートされていないオペランド型: 'type' および 'str'

4

1 に答える 1

1

まず、の使用法varsが間違っています。引数localsがないと、書き込み不可能なdictが返されるだけです。代わりに使用できますglobals

例外として、file変数はprintステートメントのスコープに含まれていません。

def open_catch_down():
    file = raw_input(...) #this variable is local to the function
    [...]

print file                #here, file references the built-in file type

fileファイル処理用のpythons組み込み型の名前と同様fileに、printステートメントのinはこのクラスを参照しているため、エラーが発生します。filename代わりに変数に名前を付けた場合file(組み込みの名前をシャドウすることは常に悪い考えであるため、これを行う必要があります)、を取得しているはずUnboundLocalErrorです。この例の最も簡単な解決策は、関数がファイル名を返し、それを外部スコープに保存するようにすることです。

def open_catch_down():
    filename = raw_input(...) #your file name

    #... rest of the code

    return filename

filename = open_catch_down()
print filename
于 2012-10-30T13:37:17.547 に答える