2016-08-26 3 views
0

に結果を並べ替え:パイソン:だから私はこのようなコードのビットを持っている複数の入力とのforループの実行と異なるリスト

measure_list=[] 
for file in file_list: 
    with open(file,"r") as read_data: 
     y=read_data.read() 
     if "Part: ABCD" in y: 
      for line in m: 
       if "Measure X:" in line: 
        measure_list.append(line) 
       elif "Measure Y:" in line: 
        measure_list.append(line) 

final=''.join(measure_list).replace("Measure","\nMeasure") 
print(final) 

(この最後の部分は、単に出力を整理するのに役立ちます)

コードのこの部分はファイルのグループを開き、それぞれが「Part:ABCD」であるかどうかを調べ、そうであれば「Measure X:」と「Measure Y:」の行を引っ張りますそれらをmeasure_listに追加します。私の問題は、たくさんのファイルがあり、複数の "Part:ABCD"ファイルがあることです。そして、).joinでリストを接合した後(出力は次のようになります。誰もが、それはそうのように見えるように、出力を整理する方法を知っていれば

Part: ABCD 
Measure X: (Numbers) 
Measure Y: (Numbers) 
Measure X: (Numbers) 
Measure Y: (Numbers) 
Measure X: (Numbers) 
Measure Y: (Numbers) 

私の質問は:

Part: ABCD 
Measure X: (Numbers) 
Measure X: (Numbers) 
Measure X: (Numbers) 
Measure Y: (Numbers) 
Measure Y: (Numbers) 
Measure Y: (Numbers) 

どんな助けもありがとうございます。

+1

はあなたの出力の前にリストを組み込みの 'ソート()'や 'ソート()'関数を使用してみてください。 –

+0

ここで 'm'とは何ですか? –

+0

mはyであることを意味しています。申し訳ありませんが、タイプミスです –

答えて

1

あなたmeasure_listこのように思える:

['Measure X: 1000', 'Measure Y: 2000', 'Measure X: 100' , 'Measure Y: 900'] 

そうですした場合、あなたは、単にこのmeasure_list並べ替えることができます。

measure_list.sort()

を210

次に、あなたが持っているでしょう:

['Measure X: 100', 'Measure X: 1000', 'Measure Y: 2000', 'Measure Y: 900'] 
+0

これは動作しますが、リストの最後まで「Part:ABCD」がスローされます。何か案は? –

+0

パートを持っていない:ABCDがリストにある... – bravosierra99

1

出力の2つの配列を作成し、内側にifステートメントを含むforループを使用して入力をソートします。次に、2つの出力を結合します。

1

私は私の前にpythonを持っていないので、わずかな構文の編集が必要な場合があります。これは、 "Measure X:..."のXとY部分でリストをソートする必要があります。

sorted(measure_list,key=lambda item: item.split()[1][0]) 
3

なぜ2つのリストを使用しないのですか?

単にその後
if "Measure X:" in line: 
    listx.append(line) 
elif "Measure Y:" in line: 
    listy.append(line) 

final = ''.join(listx + listy) 
+0

これも良い解決策です。 – bravosierra99

関連する問題