質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

1732閲覧

pythonでバイト型にしてくれというエラーが発生してしまいます。

Daimian

総合スコア53

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/01/30 11:32

前提・実現したいこと

下記のコードを実行し、気象情報を描画し、加えてcsvファイルを作成するという処理をしようとしておりますが、下記の通りエラーが出てしまいます。

発生している問題・エラーメッセージ

Traceback (most recent call last): File "ISS_LIS_FlashLoc_Quickview.py", line 62, in <module> writer.writerows(izip(["flash_lat"], ["flash_lon"])) #Define headers in row (izip creates columns) TypeError: a bytes-like object is required, not 'str'

該当のソースコード

ISS_LIS_FlashLoc_Quickview.py

python3

1 2#### Import Python packages #### 3import numpy as np 4import glob 5from netCDF4 import Dataset 6import matplotlib.pyplot as plt 7from mpl_toolkits.basemap import Basemap 8import csv 9# from itertools import izip 10try: 11 # Python 2 12 from itertools import izip 13except ImportError: 14 # Python 3 15 izip = zip 16 17 18#Define the file directories 19dataDir = '/Users/hoge/projects/hoge/NASA_challenge/nc/' #File path where ISS LIS data are stored 20csvfile = "/Users/hoge/projects/hoge/NASA_challenge/csv/isslis_flashloc_test.csv" #File path and name of CSV file 21 22#Identify all NetCDF files in the directory 23files = glob.glob(dataDir+'*.nc') 24 25#Create empty arrays to populate lightning flash location coordinates 26flash_lat = np.array([]) #latitude 27flash_lon = np.array([]) #longitude 28 29 30#Loop through list of NetCDF files, for each file, extract the lightning flash latidude 31#and longitude, and add to the respective empty array (flash_lat and flash_lon) 32for i in files: 33 datafile = Dataset(i) 34 35 flash_lat = np.concatenate([flash_lat,datafile.variables['lightning_flash_lat'][:]]) #add to array 36 flash_lon = np.concatenate([flash_lon,datafile.variables['lightning_flash_lon'][:]]) #add to array 37 38 39#Create CSV files of values from the populated flash_lat/lon arrays 40with open(csvfile, 'wb') as myfile: 41 writer = csv.writer(myfile) 42 writer.writerows(izip(["flash_lat"], ["flash_lon"])) #Define headers in row (izip creates columns) 43 writer.writerows(izip(flash_lat,flash_lon)) #Define data rows (izip creates columns) 44 45 46#Create plot of lightning flash location heat map 47plt.figure(figsize=((20,20))) #Set plot dimensions 48map = Basemap(projection='cyl', lon_0 = 0, resolution='c') 49lightning = map.hexbin(flash_lon, flash_lat, gridsize=300,bins='log',cmap='jet',mincnt=1,zorder=10) #Bin flash counts into hexbins using a gridsize of your choice 50 51#Draw geographic boundaries and meridians/parallels 52map.drawmapboundary(fill_color='k') 53map.fillcontinents(color='grey',lake_color='grey') 54map.drawcoastlines(color='white') 55map.drawcountries(color='white') 56map.drawmeridians(np.arange(0,390,30), labels=[0,0,0,1],fontsize=10, color="lightgray") 57map.drawparallels(np.arange(-90,120,30), labels=[1,0,0,0],fontsize=10, color="lightgray") 58 59cbar = map.colorbar(lightning,location='bottom',pad="5%") 60cbar.set_label('Flash Count') #Remember to change label 61 62plt.title('ISS LIS Detected Lightning Flash Locations January 4, 2018', fontsize = 18) #Rember to change title 63 64 65plt.show() 66

試したこと

csvファイルに書き込む際にbyte型にしてほしいという指摘だと思いますが、どこをどのように訂正していいかわからずです。。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

python

1with open(csvfile, 'wb') as myfile:

'wb'(バイナリモードで書き込み)で開いているのでbytesを要求されています。encodeメソッドを使って文字列をバイト列にすることも確かにできますが、最初から素直に'w'で開けばよいのでは?

投稿2019/01/30 12:19

hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Daimian

2019/01/30 12:57

あ、動きました。。その通りでした。いやー失礼しました!ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問