「CSV」ファイルに列を追加しようとしていますが、前のCSVファイルからコピーできますが、次の2列を書き込むときには、最後の行は、残りの行については、speed
とwind_dirs
です。 2つの数字は手前のfor
ループで作成されています。これをリストに保存してから書き込んでください。どんなアイデアも素晴らしいだろう。おかげPythonのCSVファイルに2つの新しい列を書き込む
with open('latlon.csv', 'r') as csvfile:
with open('wind2.csv', 'w') as csvoutput:
towns_csv = csv.reader(csvfile, dialect='excel') # csv reader
writer = csv.writer(csvoutput, lineterminator='\n') # csv writer
for rows in towns_csv:
x = float(rows[2]) #gets x axis
y = float(rows[1]) # gets y axis
url = ("http://api.met.no/weatherapi/locationforecast/1.9/?") #start of url string
lat = "lat="+format(y) #creates the latititue part of the url string
lon = "lon="+format(x) # creates the longitude part of the url string
text = url + format(lat) + ";" + format(lon) #combines the strings together to create a new url
response = requests.get(text) # get the url
xml_text=response.text # turns the requested url into a text file
winds= bs4.BeautifulSoup(xml_text, "xml") #uses BeautifulSoup to make an xml file
wind_all = winds.find_all("windSpeed") # finds the "windSpeed" element
speed = wind_all[0].get("mps") # finds the first "mps" attribute
wind_dir = winds.find_all("windDirection")# finds the "windDirection" element
wind_dirs = wind_dir[0].get("deg") #finds the "deg" attribute
new = []
row = next(towns_csv)
row.append(speed)
row.append(wind_dirs)
new.append(row)
for item in towns_csv:
item.append(speed)
item.append(wind_dirs)
new.append(item)
writer.writerow(item)
これは私にとって正しくはありません: 'writer.writerow(rows + [speed] + [wind_dirs])'。 'row'(単数形)を書くつもりでしたか?私はあなたが 'zip 'の後にそのコード行で作成している構造を描写するのに苦労しています。残念ながら、それがどのように演奏されているか見るためには自分自身を実行できません。 – roganjosh
あなたの編集でコードが壊れている可能性があります。あなたは 'for rows'をネストしました。編集:そして今あなたはそれを元に戻しました。私はあなたが編集を続けていることを示唆するためにこれらのコメントを作成していません - あなたの投稿されたコードはあなたが使っているものの正確な表現ですか?それは重要な部分です。あなたがそれを一変させ続ければ、誰もあなたのデバッグを手助けすることはできません。 – roganjosh
'writer.writerow'の使用は正しいです。そのリストの各要素が出力の列であるリストが必要です。 'zip'を使い、その呼び出しの中でリストを連結するのは不思議で、あなたが不正なリストを取得していると思いますが、私はテストできません。基本的には、前のcsv(リストになる)から行を取り出し、そのリストの余分な列を単に「延長」してそれを書き戻すことを考えているだけでしょう。 – roganjosh