2: 2016-12-04 (日) 06:55:19 njf[6] [7] [8] | 現: 2016-12-29 (木) 12:46:46 njf[6] [9] [10] | ||
---|---|---|---|
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書き出しと同じようです。変更も可能ですが、こちらもほとんどの場合そのままで問題ないと思うのでここでは省略します。 |
(This host) = https://njf.jp