

以下のようなtxtファイルを読み取ってデータをまとめる作業を行いたいと考えています。

[code]

     Location information 
     Longitude: 139.535622 Latitude:  38.519794 in observation 
     Longitude: 139.562500 Latitude:  38.500000 in MSM 
     Date UU VV UV DIR TPR MSL 
     20180101-00:00    6.28130   -0.63212    6.31300   95.74660    0.09375 101386.97660
     20180101-01:00    5.31340   -0.73485    5.36400   97.87410    0.01562 101388.50000
     20180101-02:00    6.08910   -0.29475    6.09630   92.77130    0.01562 101405.36720
     20180101-03:00    5.87680    0.02163    5.87690   89.78910    0.00000 101369.95310
     20180101-04:00    5.69520    0.05114    5.69540   89.48550    0.00000 101313.44530
    
[/code]

まとめたいデータは[UV]と[DIR]で  
[UV]は風速・[DIR]は風の向きになっていまして、真北を基準に東が90度、南が180度といったように時計回りに風向を角度で表しています。

まとめ方は風速[UV]が6m/s以上かつ  
風向[DIR]が東～南、つまり90°～180°を  
を満たす個数をカウントしていくといったものです。

過去に似たような作業をcsvファイルで行っていたのですがtxtファイルに変わりつまずいています。  
以前までのcsvファイルを動かすプログラムが以下のようなものです。

[code]

    import csv
    
    f = open("能生053.csv", "r")
    reader = csv.reader(f)
    next(reader); next(reader); next(reader); next(reader); next(reader)
    
    Direction = ['西南西','西','西北西','北西','北北西','北','北北東']
    
    count = 0
    for row in reader:
      if not row[4].strip(): # 空行スキップ
        continue
      colE = float(row[4])
      if (colE >= 10) and (row[5] in Direction):
        count += 1
    
    print(count)
        f.close()
    
[/code]

今現在以下のようなプログラムを書いているのですが上手く動きません。

[code]

    f = open("府屋大橋2018.txt", "r")
    
    Direction = [range(90,180)]
    
    count = 0
    for row in f.readlines():
      if (col[42] >= 6) and (col[52] in Direction):
        count += 1
    
    print(count)
        f.close()
    
[/code]

実行すると name col is not defined というエラーが出ています。  
読み取りたい行をどうやって表すのかが分からなくて止まってしまっています。

初歩の質問かもしれませんが、回答お願いします。

[code]

    f = open("府屋大橋2018.txt", "r")
    
    dir_min = 90
    dir_max = 180
    
    count = 0
    for line in f.readlines():
        # skip headers
        if any(char.isalpha() for char in line):
            continue
    
        date, uu, vv, uv, direction, tpr, msl = line.split()
    
        if float(uv) >= 6 and dir_min < float(direction) < dir_max:
            count += 1
    
    print(count)
    f.close()
    
[/code]

* * *

回答してくださりありがとうございました、うまくいきました。  
追加でなのですが、以下の1文はどのような意味を持っているのでしょうか？

[code]

    if any(char.isalpha() for char in line):
    
[/code]


CC BY-SA 4.0
2020-01-21T08:14:41.610
62423
2020-01-22T04:30:39.753
2020-01-22T04:30:39.753
3060
36312
question
python
Pythonで空白区切りのテキストファイルをCSVと同様に読み込みたい


  1. colがプログラム中に出てきません。おそらくrowの間違い。
  2. `range(90, 180)` は整数のみで構成される離散的な配列（厳密にはイテレータ）ですので、浮動小数点数は含まれません。 `in` でその範囲に含まれているかを確認することはできません。
  3. `[42]` や `[52]` はテキスト上の列番号であって、その場所にある複数桁の数字を動的に読むわけではありません。空白で区切られた行なら `split()` が使えます。

ということで、こんな感じで動くんじゃないかと思います。

[code]

    f = open("府屋大橋2018.txt", "r")
    
    dir_min = 90
    dir_max = 180
    
    count = 0
    for line in f.readlines():
        # skip headers
        if any(char.isalpha() for char in line):
            continue
    
        date, uu, vv, uv, direction, tpr, msl = line.split()
    
        if float(uv) >= 6 and dir_min < float(direction) < dir_max:
            count += 1
    
    print(count)
    f.close()
    
[/code]


CC BY-SA 4.0
2020-01-21T11:54:47.953
62435
2020-01-21T11:54:47.953
62
62423
answer