2011-07-05 6 views
1

私は実際のプログラミングの知識がなくても、Pythonの新機能です。私の現在の仕事では、私は約500以上のファイルからテキスト形式のデータを取り出し、それらをプロットするよう求められています。私はある程度のプロットを理解していますが、データを操作して特定のセクションを選択するのは簡単ではありません。現在、このファイルを開くために私が持っているものです。データ操作:リストを選択できないという理由からステミングを避ける

fp=open("file") 
for line in fp: 
    words = line.strip().split() 
    print words 

結果は、それが私のファイルの各行のリストを与えるですが、私は作っ最後の行にアクセスすることができます。誰も私に許可する方法を知っていますリストの異なるバリエーションを選択しますか?どうもありがとう!!

答えて

1

次のようにファイルからの行のリストを取得する最も簡単な方法は次のとおりです。

with open('file', 'r') as f: 
    lines = f.readlines() 

今、あなたはそれらの行を分割するか、あなたも一緒にやりたいことができます。

lines = [line.split() for line in lines] 

私は」あなたの質問に答えてくれるかどうかわかりません - より具体的なことがあれば教えてください。私はあなたが求めているものを正確にを理解していないので


、ここでテキストファイルを処理する方法をいくつかのより多くの例があります。対話型インタプリタでこれらを試すことができます。対話型インタプリタは、コマンドラインで 'python'と入力するだけで一般にアクセスできます。

>>> with open('a_text_file.txt', 'r') as f: 
...  text = f.read() 
... 
>>> text 
'the first line of the text file\nthe second line -- broken by a symbol\nthe third line of the text file\nsome other data\n' 

これは、未加工のファイルのテキストです。それは文字列です。文字列は変更できません - 変更することはできませんが、部分的にまたは全体的にコピーすることができます。

>>> text.splitlines() 
['the first line of the text file', 'the second line -- broken by a symbol', 'the third line of the text file', 'some other data'] 

splitlinesは文字列メソッドです。 splitlinesは、\n(改行)文字が見つかるたびに文字列を分割します。文字列の別々のセクションのコピーを含むリストを返します。

>>> lines = text.splitlines() 

ここでは、上記の行のリストを新しい変数名に保存しました。

>>> lines[0] 
'the first line of the text file' 

リストには索引付けによってアクセスします。 0からlen(lines) - 1までの整数を指定するだけで、対応する行が返されます。

>>> lines[2] 
'the third line of the text file' 
>>> lines[1] 
'the second line -- broken by a symbol' 

これで、個々の行を操作することができます。

>>> lines[1].split('--') 
['the second line ', ' broken by a symbol'] 

splitは別の文字列メソッドです。これはsplitlinesのようなものですが、デマーケーターとして使用する文字または文字列を指定できます。

>>> lines[1][4] 
's' 

文字列内の文字をインデックスすることもできます。

>>> lines[1][4:10] 
'second' 

文字列を「スライス」することもできます。結果は4〜9の文字のコピーです。10はストップ値なので、10番目の文字はスライスに含まれません。 (あなたはあまりにもリストをスライスすることができます。)

>>> lines[1].index('broken') 
19 

あなたは、文字列内の部分文字列を検索する場合、一つの方法は、indexを使用することです。部分文字列が最初に出現するインデックスを返します。 (サブは、文字列内にない場合はエラーがスローされます。あなたはそれは、-1サブが文字列でない場合。返しfind、使用したくない場合)次に

>>> lines[1][19:] 
'broken by a symbol' 

をそれを使って文字列をスライスすることができます。ストップインデックスを指定しないと、文字列の残りの部分だけが返されます。

>>> lines[1][:19] 
'the second line -- ' 

開始インデックスを指定しないと、文字列の先頭が返され、停止インデックスで停止します。

>>> [line for line in text.splitlines() if 'line' in line] 
['the first line of the text file', 'the second line -- broken by a symbol', 'the third line of the text file'] 

またinを使用することができます - それはサブが文字列である場合Trueを返すブーリアン演算です。この例では、リスト内包表記を使用して、'line'の行のみを取得しました。 (最後の行がリストにないことに注意してください。フィルタされています)

質問がある場合は教えてください。

+0

そして、私はhttp://docs.python.org/tutorial/datastructures.html#more-on-listsを読むことをお勧めします – SteveMc

+0

これは多くの助けになります!しかし、ラインの一部だけを選択する方法はありますか? –

+0

soooたくさんありがとう!私はどのようにupvote thhoughを受け入れるか分からない、ウェブサイトは私がポイントを持っていないと言っ続けている? –

関連する問題