0

次のような行を含むtxtファイルの解析に問題があります。

50.0 0.1 [0.03, 0.05, 0.067, 1.003, ...]
50.0 0.134 [0.3465, 0.5476, 1.0, ....]
.
.
.

各行の先頭は必要ありません。リストだけが必要です。リスト内の要素は同じ数の文字を保持しておら、スペースとコンマで区切られています。

私がやりたいのは、各リストの前にあるものをすべて無視して、(たとえば)リストの9番目の要素にジャンプし、値を読み取って保存することです。次に、次の行に移動して同じことを行います。

私のアプローチ:

txtの行を文字列ではなくリストとして解析する方法を見つけて、リストの要素を処理できるようにします。

また

リストの9番目の値にジャンプして、次の値(この場合は10番目)まですべてを読み取ります。

これを行う方法はありますか?

4

5 に答える 5

1

この形式の各行がある場合:

line = '50.0 0.1 [0.03, 0.05, 0.067, 1.003]\n'

まず、文字列の不要な部分を削除します。'['および']'を見つけて、スライスを使用します。

line[line.index('[')+1:line.index(']')]

残りの文字列を区切り文字で分割します(現在:'、')。文字列のリストを取得します。

line[line.index('[')+1:line.index(']')].split(',')

n番目の要素を取得し、float()またはeval()で変換します。

float(line[line.index('[')+1:line.index(']')].split(',')[3])  

リストからさらに要素が必要な場合は、「[」と「]」を使用して文字列を評価すると、リストが取得されます。(注:eval()は遅いです。)

eval('[0.03, 0.05, 0.067, 1.003]')  

コードは次のようになります。

with open('datas.txt') as f:
    n = 8
    for line in f:
        a = float(line[line.index('[')+1:line.index(']')].split(',')[n])  
        do_something_with(a)
于 2012-04-16T12:12:19.233 に答える
0

あなたの質問はうまく形成されていないので、私はより広い方法で答えようとします

  1. ファイルを直線的に読み取ります。
  2. データの形式が統一されている場合、つまり最初と最後に角かっこがあります。b。数字はスペースで区切られます

    ストリップを使用して末尾の空白や改行を削除します。スライスして最初と最後の文字を削除します。

    instr="[0.03 0.05 0.067 1.003]"[1:-1]

    split()を使用して、文字列を数値のリストに分割します。

  3. リストにインデックスを付けて、9番目の要素にアクセスします
  4. 保存するか、実行したい計算を実行します
于 2012-04-15T16:57:49.917 に答える
0

ファイルを読み取り、すべての行の9番目の要素を抽出する必要がある場合は、次のようにする必要があります。

with open('your_file.txt') as in_file:

    my_list = [line.split()[9] for line in in_file]
于 2012-04-15T17:05:25.783 に答える
0

テキストファイルの構造が投稿されたとおりであると仮定します。

def openFile(file):
    "Usage: list = openFile(filename)"
    try:
        linesList = []
        inputFile = open(file, "r")
        tempList = inputFile.readlines()
        inputFile.close()
        for line in tempList:
            linesList.append(line.replace("[","").replace("]","").split())
        return linesList
    except:
        print("Could not open file!")

def saveFile(file, data, element):
    "Usage: saveFile('text.txt',myList,9)"
    outputFile = open(file, "w")
    for line in data:
        outputFile.write(line[element-1] + "\n")
    outputFile.close()



def main():
    myList = openFile("text.txt")
    #now you have a list of lists :D
    #you can do what ever you want with the data
    print(myList)
    saveFile("text2.txt",myList,2)

main()
于 2012-04-15T17:26:12.813 に答える
0

行のリストの先頭までの文字を削除するには、1つの方法は、左角かっこ文字で始まる行のスライスを取得することです。これは次のようになります。

line = line[line.index('['):]

次に、split()またはeval()関数を使用して文字列を処理し、文字列をリストに変換して、そのポイントから要素を取得できます。

line = line[line.index('['):].split()[9]
于 2012-04-15T18:56:49.603 に答える