私は1,000ファイルを持っています。Pythonを使ったif文を使った単純なラムダ関数
!dataset_description = Analysis of POF D119 mutation.
!dataset_type = Expression profiling by array
!dataset_pubmed_id = 17318176
!dataset_platform = GPL1322
目的:各ファイルの先頭全てがこのようになり、私はすべてのファイルとの間にExcelのスプレッドシートを作ることができるので、リストにこの情報を変換したいです。つまり私は、リストには、次のようになりたい:
[Analysis_of_POF_D119_mutation,Expression_profiling_by_array,17318176,GPL1322]
私はこのコードを持って、これはちょうど最初の変数、「dataset_descriptionを!」抽出することである(ただし、私はその後、金利すなわち、各変数上でコードを実行します!dataset_type、dataset_pubmed_id、dataset_platform):!! "pythonically"
OpenDataset = open(sys.argv[1], 'r')
Dataset = OpenDataset.readlines()
ListOfInformation = []
formatted_line = lambda x: "_".join(line.strip().split("=")[x].split())
for line in Dataset:
if line.startswith("!dataset_description"):
description = formatted_line(1)
print description
コードの作品は、しかし、私はPythonの基本を理解する段階になりました、と私はより多くのコーディングを開始します。私には2つの質問があります。
- 私が使用しているラムダ式を使用するのは愚かなようです。ラムダ式の "x"は常に "="記号の後に来るものが必要なので、常に1になります。したがって、xは実際には「変数」ではありませんが、変数なしでラムダ式を持つことはできません。
formatted_line = lambda x: "_".join(line.strip().split("=")[1].split()) if line.startswith(x)
しかし、このコードは構文エラーを返します。行はこのような何かをやって、真の可変である、で始まる何
は、私はあることに、変数を変更しようとしました。
誰かが上記のラムダ式を動作させる方法を知っていますか?
- これらのファイルは、実際には非常に大きな可能性があります。しかし、私が必要とする情報はファイルの先頭にあり、すべては "!"で始まります。シンボル。ですから、ファイルの先頭にX個の行が必要なときに、ファイル全体を読むのはばかげているように思えます。すべての行は "!"で始まります。 (1ファイルあたりの正確な行数は可変です)。 "!"で始まる行だけを読む方法はありますか?または単にfile.readlines()を使用する方が速いです。
なぜあなたは常に '1'渡していますか?代わりに 'line'を渡してください。 – thefourtheye
"私は変数なしでラムダ式を持つことはできません" - 確かにできます。変数に入れないでください。 – khelwood
Lambdaの "式"は他の式と同じように値を生成する必要があります。最後の 'lambda'バージョンでは、行が' x'で始まらない場合、式の結果はどうなりますか?そのため、構文エラーが発生します。 – thefourtheye