Ad
2: 2016-12-04 (日) 06:55:19 njf ソース バックアップ No.2 を復元して編集 現: 2016-12-29 (木) 12:46:46 njf ソース 編集
Line 3: Line 3:
仕事などのデータをExcelやGoogleスプレッドシートなどでいただくことが多くあります。数百行ぐらいならそのまま使えますが、数千行とかになるとなかなか管理が難しくなってきます。 仕事などのデータをExcelやGoogleスプレッドシートなどでいただくことが多くあります。数百行ぐらいならそのまま使えますが、数千行とかになるとなかなか管理が難しくなってきます。
-毎回マクロなどで対応するのも大変なので、CSVに書き出ししてPythonでsqliteなどのデータベースに入れて管理することが多くあります。するとSQLが使えるので、集計などが自動化でき、かつ高速です。+毎回マクロなどで対応するのも大変なので、CSVに書き出ししてPythonでsqliteなどのデータベースに入れて管理したりしています。するとSQLが使えるので、集計などが自動化でき、かつ高速です。
特にGoogleスプレッドシートの場合は、権限によってはCSVでダウンロードするところからPythonで処理することも可能なので、表示の重い画面を開かずに更新の有無などをチェックできて、管理するのがとても楽になります。 特にGoogleスプレッドシートの場合は、権限によってはCSVでダウンロードするところからPythonで処理することも可能なので、表示の重い画面を開かずに更新の有無などをチェックできて、管理するのがとても楽になります。
-以下で簡単にPython2.7でのCSV処理についてまとめます。+以下でそんな時に必要となるPython2.7でのCSV処理について簡単にまとめます。
*CSVファイルの読み込み [#rf8c79ef] *CSVファイルの読み込み [#rf8c79ef]
-まず以下のテストファイルを「test.csv」とう名前で用意したとします。+まず以下のテストファイルを「test.csv」という名前で用意したとします。
 ID,name,comment  ID,name,comment
Line 23: Line 23:
 import csv  import csv
 + 
 f = open("test.csv")  f = open("test.csv")
 + 
 csvData = csv.reader(f)  csvData = csv.reader(f)
 + 
 for row in csvData:  for row in csvData:
     print row[0],row[1],row[2]      print row[0],row[1],row[2]
 + 
 f.close()  f.close()
Line 43: Line 43:
 import csv  import csv
 + 
 with open('test.csv', 'rb') as f:  with open('test.csv', 'rb') as f:
     reader = csv.reader(f)      reader = csv.reader(f)
Line 65: Line 65:
 f = codecs.open("test.csv", 'r', 'utf_8')  f = codecs.open("test.csv", 'r', 'utf_8')
 csvData = csv.reader(f)  csvData = csv.reader(f)
 + 
 for low in csvData:  for low in csvData:
     print low[0],type(low[1]),low[2]      print low[0],type(low[1]),low[2]
 + 
 f.close()  f.close()
Line 103: Line 103:
*CSVファイルの書き込み [#xda09f1c] *CSVファイルの書き込み [#xda09f1c]
-CSVファイルの書き込みの簡単な例として、さきほどのtest.csvをtest_out.csvというファイルに書き込むのをあげると、以下のようになります。+CSVファイルの書き込みの簡単な例として、さきほどのtest.csvをtest_out.csvというファイルに書き込む方法をあげます。そのコードは以下のようになります。
 inFile = open("test.csv", 'r')  inFile = open("test.csv", 'r')
 outFile = open('test_out.csv', 'w')  outFile = open('test_out.csv', 'w')
 + 
 csvData = csv.reader(inFile)  csvData = csv.reader(inFile)
 + 
 writer = csv.writer(outFile)  writer = csv.writer(outFile)
 + 
 for row in csvData:  for row in csvData:
     writer.writerow(row)      writer.writerow(row)
 + 
 inFile.close()  inFile.close()
 outFile.close()  outFile.close()
Line 121: Line 121:
 inFile = open("test.csv", 'r')  inFile = open("test.csv", 'r')
 + 
 outFile = open('test_out.csv', 'w')  outFile = open('test_out.csv', 'w')
 + 
 csvData = csv.reader(inFile)  csvData = csv.reader(inFile)
 + 
 writer = csv.writer(outFile)  writer = csv.writer(outFile)
 writer.writerows(csvData)  writer.writerows(csvData)
 + 
 inFile.close()  inFile.close()
 outFile.close()  outFile.close()
 +
 +UTF-8で試してみると予想通りエラーが出ます。
 +
 + for row in csvData:
 +     r1utf = row[1].decode("utf_8")
 +     writer.writerow((row[0],r1utf,row[2]))
 +
 +結果
 + Traceback (most recent call last):
 +   File "csvTest.py", line 16, in <module>
 +     writer.writerow((row[0],r1utf,row[2]))
 + UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
 +
 +書き込むときはstrに変換するのを忘れないようにしましょう。
 +
 +出力形式はやはりデフォルトではエクセルのCSV書き出しと同じようです。変更も可能ですが、こちらもほとんどの場合そのままで問題ないと思うのでここでは省略します。


トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード印刷に適した表示   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom Powered by xpWiki
Counter: 2835, today: 2, yesterday: 0
MenuBar
広告

ログイン

ユーザー名:


パスワード:





パスワード紛失

Portuguese | English | German | Greek | Japanese | Korean | Russian | T-Chinese top
NJF