csv ファイルを読み取るコードがいくつかあります。次に、コードはユーザー入力に基づいて値を追加します。私が抱えている問題は、無効な値を含むエントリを削除することです。特定の無効な値は M です。csv ファイルにない場合は M を使用します。したがって、基本的に私がやりたいことは、ユーザーに最初と最後の月を入力させてから、コードに降水量の値を加算させることです。ただし、文字列に MI を含める必要がある場合は、そのデータ行を含めたくありません。たとえば...以下に含まれる部分的なサンプル。
Station, Stat, lat, lon, JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG
Bainville 6 NE, 24-0408-06, 48.14065, -104.267, 0.10, 0.01, 0.12, 1.23, 0.02, 0.34, M, 0.00
Brockton 20S, 24-1164-06, 47.5075, -104.324, M, 0.08, 0.13, 1.54, 2.43, 1.23, 1.12, 0.9
Cohagen, 24-1875-06, 47.564, -106.7, 0.3, 0.37, M, 0.76, 1.55, 1.69, 0.35, 0.41
Sidney, 24-7560-06, 47.36, -104.47, 0.1, 0.21, 0.05, 1.21, M, 1.25, 2.75, 0.89
ここで、ユーザーが 1 月から 3 月までの月を選択した場合、値が M であるため、Brockten 行 (1 月) と Cohagen 行 (3 月) は省略されます。ただし、ユーザーが 4 月から 5 月までの月を選択した場合その場合、省略される行は Sidney になります。
これが理にかなっていることを願っています。この投稿はすでに非常に長いことを知っていますが、私のコードも含めます。
##################################################
import csv
import array
import decimal
decimal.getcontext().prec = 4
from time import gmtime, strftime
print strftime("%Y-%m-%d %H:%M:%S", gmtime())
# Create an unordered MON to column number dictionary and get user data
mdict = {'MAR': 11, 'FEB': 10, 'AUG': 16, 'SEP': 17, 'APR': 12, 'JUN': 14,
'JUL': 15, 'JAN': 9, 'MAY': 13, 'NOV': 19, 'DEC': 20, 'OCT': 18}
month_start = raw_input('Input the 3 letter ID of beginning month: ')
month_end = raw_input('Input the 3 letter ID of ending month: ')
month_start = month_start.upper()
month_end = month_end.upper()
mon_layer_name = month_start + ' through ' +month_end
user_month = '[' + mon_layer_name + ']'
start_num = mdict[month_start]
end_num = mdict[month_end]+1
new_list = [['Station', 'Lat', 'Long', 'mysum']]
with open('R:\\COOP\\temp\\COOP_rainfall2.csv', 'rb') as csvfile:
filereader = csv.reader(csvfile)
filereader.next() # this is to skip header
for row in filereader:
#print row
sta = row[0]
lat = row[2]
lon = row[3]
tot = decimal.Decimal(0)
for x in row[start_num:end_num]:
print 'now in line 34 in code'
if x == '': x = 0
elif x == 'M': # I think this is where I need to do something just not sure how ot accomplish it.
x = 0
print row
tot = tot + decimal.Decimal(x)
if tot == 0: continue
else: new_list.append([sta, lat, lon, str(tot)])
with open('R:\\COOP\\temp\\output.csv', 'wb') as csvout:
print 'Now in file writer code block'
filewriter = csv.writer(csvout)
for line in new_list:
filewriter.writerow(line)
Rex = 'R:\\COOP\\temp\\output.csv'
Precip=[] #creating an array named Precip
inp = open (Rex,"r")
for line in inp.readlines():
line.split(',')
Precip.append(line)
file.close(inp)
print 'End of code'
どんな助けでも大歓迎です。