2017-02-13 2 views
0

OKこれはおそらくかなりシンプルですが、私はまだPythonの新機能です。 私は助けに感謝します。Python:文字列のテキストファイルを検索し、それに続いて書かれたものにアクセスする方法

コマンドラインから指定されたテキストファイルにアクセスしようとしていますが、行に先行する浮動小数点データが含まれていますが、関連する年です。例えば

2010 
11 21.5 18 15.2 13 17 14 0 10 16 8.6 5 
2013 
10.6 14.5 17.9 11.2 1.5 1.9 16 2.2 10 5.2 4.6 5 

私は今年の入力をユーザーに尋ね、その後、年がテキストファイルで発見された場合、各月の関連データを印刷したいです。

私はこれを動作させることができないようです。

現在、プログラムは年をチェックし、見つからない場合は再度質問しますが、見つかった場合はただちに再度質問します。

これは私のコードの一部の片付けバージョン:私は道オフ近いんですかあれば

f = open(sys.argv[1]) 

months = ['January', 'February', ...] 

while True: 
    f.seek(0) 
    os.system('cls') 
    year = input("Enter year for which you want rainfall data: ") 
    line = f.readline().strip() 
    while line and line != year: 
     line = f.readline().strip() 

    if not line: 
     print("No rainfall data found for year {}".format(year)) 
     input("Press Enter to continue ...") 
     response = input("Do it again for another year? [[y]/n] ") 
     if response == "n": 
      break 

    else: 
     rain_line = f.readline() 
     rain_line = rain_line.strip() 
     rain_line = rain_line.split() 
     rain_strings = list(rain_line) 
     rain_numbers = [] 
     for rain in rain_strings: 
      rain_numbers.append(rain) 

    print("in {}, {} Millimeters.".format(months[1], rain_numbers[1])) 

誰が見ますか?

私は何時間も周りを見てきました。

答えて

0

これを1行と次の行と見なしてはなりません。ペアとみなしてください。このpairwise iterator使用:

def parse_rainfall(f): 
    for year, data in pairwise(f): 
     # ... 
0

をあなたのコードの場合、問題はwhile式while line and line != year:の条件です。

year = input("Enter year for which you want rainfall data: ")ため2010のようなあなたが入力した場合、それはintタイプに解析され、文字列であるline、に等しいん。変換を使用してstr(year)問題を修正します。

しかし、効率とコーディングの両方で別の方法を使用することができます。

ファイルのサイズがそれほど大きくない場合は、最初にファイルを解析して{2010: [11 21.5 18 15.2 13 17 14 0 10 16 8.6 5], ...}のようなPython辞書にしてから、年をキーとして辞書を照会してそのデータをフェッチすることができます。

ファイルが大きい場合は、解析してSQLまたはNoSQLのいずれかのデータベースに書き込むことを検討し、クエリはPython辞書と同じくらい単純になります。

0

それ以外の場合は、テキストファイルの検索方法を変更して、このようなソリューションを使用することができます(大きなファイルではテストしませんでした。

私はあなたの入力ファイルがinput_fileと呼ばれていると仮定しています:

def get_data(): 
    data = list(k.rstrip() for k in open("input_file", 'r')) 
    d = list(data[k:k+2] for k in range(0,len(data),2)) 
    final = [] 
    while True: 
     user_data = input("Enter a year: ") 
     if user_data == 'q': 
      break 
     for k in d: 
      if k[0] == user_data: 
       final.append(k[1]) 

     if final != '': 
      print("\n".join(final)) 
      final = [] 
     else: 
      print("Cannot find any data for the year:", user_data) 


get_data() 

デモ:

Enter a year: 2010 
11 21.5 18 15.2 13 17 14 0 10 16 8.6 5 
Enter a year: 2013 
10.6 14.5 17.9 11.2 1.5 1.9 16 2.2 10 5.2 4.6 5 
Enter a year: 2000 
Cannot find any data for the year: 2000 
Enter a year: 2010 
11 21.5 18 15.2 13 17 14 0 10 16 8.6 5 
Enter a year: 2100 
Cannot find any data for the year: 2100 
Enter a year: 22 
Cannot find any data for the year: 22 
Enter a year: q 
関連する問題