のうない あうとぷっと。
プログラミング

【Python】覚書シリーズ〜ファイル読み込み関連〜

前回に引き続いて、自分用の覚書を書いておきますw

引数読み込み

Pythonで引数を読み込むときはsysモジュールを読み込む必要があります。

import sys

これですね。

ファイルの実行時に引数を指定する場合、

sysモジュールを読み込んでいれば

sysモジュールのargvに引数が格納されます。

sys.argv

なので、例えば

python sample.py nounai-output

と実行するとnounai-outputが引数として使用され、

Python2系ではprint sys.argvを実行すると

> ['nounai-output']

と表示されます。

プログラム以降、スペースで区切ったものが引数となります。

引数はリスト型で格納されるので、

python sample.py www nounai-output com

の場合は

> ['www','nounai-output','com']

と表示されます。

順番指定で取得する場合は

print sys.argvのように配列順を指定します。

なお、リストは0から始まります。

ファイル読み込み

ファイルを読み込む場合は特別な外部モジュールは必要ありません。

open(<読み込むファイル>,<ファイル操作時のモード>)をするとファイルの読み込むことができます。

モードは
r : 読み込み
w : 書き込み
a : 追記
+ : 読み書き両方を指定したい場合に使用
を指定することができます。

例えば

f = open('read.txt', 'r')

とすれば、read.txtというファイルを開くことができます。

開いたファイルの中身を取りだすときは

for文で回すと1行ずつ中身が取り出せます。

先ほど、f = open('read.txt', 'r')としたので、

read.txtの中身はfに格納されています。

for row in f:
    print(row)

fをfor文でループさせると、1行ずつ取り出してfor文内で扱うことができます。

例えば

おはようございます
こんにちわ
こんばんわ
いってきます
おはようございます

の順に記載されているファイルがある場合、

for row in f:
    print row

上から順に

おはようございます
こんにちわ
こんばんわ
いってきます
おはようございます
が出力されます。

ちなみに、下記のような書き方でも処理ができます。

for row in open('read.txt', 'r'):
    print row

CSV読み込み

上記で読み込んだファイルがただのテキスト文だったので

読み込むだけで普通に表示ができましたが、

ファイルがCSVの場合は通常のように読み込んでもうまくいきません。

例えば、1,2,3,4,5,6,7,8,9,0と記載されたファイルを読み込んだ場合、

上記のように読み込んでも

1,2,3,4,5,6,7,8,9,0としか表示されません。

これをCSVとして扱うために外部モジュールのcvsを読み込む必要があります。

外部モジュールcsvを使用して書くときの例を下記に記載します。

import csv

csv_file = open('read.csv', 'r')
reader = csv.reader(csv_file)

上記の処理の場合、変数readerの中には

['1','2','3','4','5','6','7','8','9','0']

csvで読み込んでるため、カンマ区切りのリストとして認識します。

私がプログラムを書くときは

import csv

reader = csv.reader(open('read.csv', 'r'))

こんな感じで1行で書いてしまうことが多いです。

設定ファイルを読み込む

独自で作った設定ファイルを読み込むときに使います。

例えば下記のような設定ファイルを用意します。

config.ini

# コメントアウトも出来ます
[settings]
host = localhost
port = 12345

# 「 = 」前後にスペースがあってもなくても問題なし
[system]
os=Windows
version=10
path=

# 区切りは「 = 」でも「 : 」可
[user]
name     : user
password : password
mail     : mail@example.com

上記ファイルを読み込むときは

Python3系の場合はimport configparser

Python2系の場合はimport ConfigParser

で設定ファイル読み込みモジュールを使用できます。

設定値の取り出し方は

python3系の場合

inifile = configparser.ConfigParser()
inifile.read('./config.ini', 'UTF-8')

print(inifile.get('settings', 'host'))

python2系の場合

inifile = ConfigParser.SafeConfigParser()
inifile.read('./config.ini')

print inifile.get('settings', 'host')

上記のようにセクション名と設定名を指定する必要があります。

JSON形式で取り込む方法もあるのですが、あとで追記します。