2016-11-09 8 views
0

私はPythonでプレーンテキストから読んでいるアプリを持っています。Pythonの特定の行からどのように読み込むことができますか?

正常です。私の質問は、行ごとにではなく複数の行から読み取る可能性のある方法があるということです。例えば、ここにある私のプレーンテキストファイルcolor.txtです:私は「パート1」からカラー1とカラー2はので、私はラインでこの行を読んでいるが、私はカラー2用カラー1の位置を変更した場合、私は」欲しい

### 
##### 
######### 

#example colors 
#line of colors 
#line colors PART 1 
     color1 gray 
     color2 blue 


# line colors PART 2 
iface eth1 inet static 
     color1 yellow 
     color2 green 

エラーが出るので、 "part1"の中のすべてを読む方法はありますか?それで私は同じ結果を得ることができます。ここで

は私の完全なコードがあります:

from flask import Flask,render_template,flash,request,redirect 
import os 
import sys 
app = Flask(__name__) 

def color1_p1(): 
    with open('color.txt', 'r+') as f: 
     for i, line in enumerate(f): 
      if i == 7: 
      found_color = line.find('color1') 
      if found_color != -1: 
       color = line[found_color+len('color1:'):] 
       print ('Color: '), color 
    return color 


def color2_p1(): 
    with open('color.txt', 'r+') as f: 
     for i, line in enumerate(f): 
      if i == 8: 
      found_color = line.find('color2') 
      if found_color != -1: 
       color = line[found_color+len('color2:'):] 
       print ('Color: '), color 
    return color 


def color1_p2(): 
    with open('color.txt', 'r+') as f: 
     for i, line in enumerate(f): 
      if i == 13: 
      found_color = line.find('color1') 
      if found_color != -1: 
       color = line[found_color+len('color1:'):] 
       print ('Color: '), color 
    return color 

def color2_p2(): 
    with open('color.txt', 'r+') as f: 
     for i, line in enumerate(f): 
      if i == 14: 
      found_color = line.find('color2') 
      if found_color != -1: 
       color = line[found_color+len('color2:'):] 
       print ('Color: '), color 
    return color 



@app.route('/') 
def showLine(): 
    color1 = color1_p1() 
    color2 = color2_p1() 
    color3 =color1_p2() 
    color4 = color2_p2() 
    return render_template('color.html', color1=color1, color2=color2, color3=color3,color4=color4) 

if __name__ == '__main__': 
    app.run(debug=True) 

あなたは私がラインでコンテンツを取得しています見ることができるように、私は一部の内部ですべてを読みたい「1」、私はラインのない試みたが、そうするとき「パート2」または最初に見つかった「カラー1とカラー2」が読み込まれます。

は、ここに私の出力です:

Click here!

私が欲しいのは関係なく、それがある行をカラー1またはカラー2を読まないし、私は位置を変更する場合、プログラムがこれを読んでください、と同じことが起こるはず

+0

正規表現を使って 'color1'の「パターン」を見つけることができるかもしれません –

+0

どうやってそれをするといいですか? –

+0

私はそれがあなたがしたことよりも良いとは思わない –

答えて

2
#!/usr/lib/env python 
import re 

file = open("color.txt","r") 
content = file.read() 
file.close() 
content = content.split('PART ')[1:] 
dic = {} 
for part in content: 
    dic[int(part[0])] = part[1:] 

def color(color_index, part_index): 
    color = re.search('color{_color_index}\s(.*?)\s'.format(_color_index=color_index),dic[part_index]).group(1) 
    print 'color',color_index,'of PART',part_index,":",color 
    return color 

color(1,1)#color 1 of PART 1 : gray 
color(2,1)#color 2 of PART 1 : blue 
color(1,2)#color 1 of PART 2 : yellow 
color(2,2)#color 2 of PART 2 : green 

このようにして、どのように部品や色が配置されているかに関わらず、必要なものを手に入れることができます。

+0

インデックス1または2なしで動作させる方法はありますか?私のプレーンテキストには「color」という言葉だけが含まれていますか? @Max –

+0

'color = re.findall( 'color \ d \ s(。*?)\ s'、open( 'color.txt'、 'r')によって、 )) 'あなたが色やパーツのインデックスを気にしないならば。または、もしあなたがそれらの部品に対応して見つけたいなら、 'colors = re.findall( 'color \ d \ s(。*?)\ s'、dic [part_index]) **正規表現**についての基本的な知識を学ぶ方が良いと思います。これは、テキストファイルで特定の文字列を探したいときに役立ちます。 –

+0

私は 'color = re.findall( 'color \ d \ s(。*?)\ s'、dic [part_index])'をパートで使いたいので、次の結果を得ました。代わりに 'red'にする必要がありますか? @Max –

関連する問題