【超高速Python入門】第7回:ファイル読み書き(open, numpy)

Pythonのファイル読み書きについて説明します。

ファイル読み書きについて

ファイル読み書きは、テキストファイルを読み込んで何かの処理に使用したり、処理した結果を書き込んだりするもので一つでも方法を覚えておくと便利です。ここでは、open関数とNumpyライブラリを使用した方法について記載しています。

【Udemy】データ分析シリーズ? -Pythonライブラリの実践活用-

ファイル読み書き

ファイル読み込み

Numpyの場合は、Numpy配列型として変数に書き込まれます。

open関数

with open('ファイルパス') as 変数:
    処理
# 変数.read()を使って一行の値を取り出す

Numpy

import numpy as np
変数 = np.loadtxt('ファイルパス')

ファイル書き込み

書き込みの場合、読み込みのオプションやメソッドを変えるだけで良いです。

open関数

書き込みモードを指定(mode=’w’)し、.writeで一つの値を書き込みます。リストの場合は1要素ずつ書き込む必要があります。

# 一つの値を書き込む
with open('ファイルパス', mode='w') as 変数:
    変数.write(値)

# 一次元リストの値を書き込む
with open('ファイルパス', mode='w') as 変数:
    for 値 in 一次元リスト:
        変数.write(値)

Numpy

配列を一行で書き込むことができます。fmtは指定必須ではないが、正しく指定したほうが意図が明示的になり、エラーも出にくくなります。また第二引数は、リスト型でもNumpy配列でもどちらでもよいです。

import numpy as np

np.savetxt('ファイルパス', リストorNumpy, fmt='フォーマット')

フォーマットの指定の仕方は公式のドキュメントに記載があるのでそちらを参考にしてください。

numpy.savetxt — NumPy v1.21 Manual

サンプルとして以下の簡単なテキストデータを考えてみます。

apple
lemon
orange
## Sample
import numpy as np

### 読み込み - open関数
with open('test.txt') as f:
    print(f.read())

# 出力
# apple
# lemon
# orange


### 読み込み - Numpy
data = np.loadtxt('test.txt', dtype='unicode')
print(data)

# 出力
# ['apple' 'lemon' 'orange']



### 書き込み - open関数
# 一つの値を書き込む
data = 'apple'
with open('test_write_str.txt', mode='w') as f:
    f.write(data)


# 一次元リストの値を書き込む
list_data = ['apple','lemon','orange']
with open('test_write_list.txt', mode='w') as f:
    for data in list_data:
        f.write(data)


### 書き込み - Numpy
# リストを書き込み
list_data = ['apple','lemon','orange']
np.savetxt('test_write_np_1.txt', list_data, fmt='%s')


# Numpyを書き込み
np_data = np.array(list_data)
np.savetxt('test_write_np_2.txt', np_data, fmt='%s') # 文字列の場合は、'%s'

CSVファイルの読み込み

以下のようなCSVファイルの読み込みについてです。

1,apple
2,lemon
3,orange

カンマ区切りのため、その区切りを考慮して二次元配列として読み込みたいところです。しかし上記の方法だとうまく読み込めません。

そこで以下のように読み込む必要があります。

## Sample - open,csv
import csv

list_data = []
with open('test.csv') as f:
     iter_data = csv.reader(f)
     for data in iter_data:
         list_data.append(data)
print(list_data)

# 出力
# [['1', 'apple'], ['2', 'lemon'], ['3', 'orange']]
## Sample - numpy
import numpy as np

np_data = np.loadtxt('test.csv', delimiter=',', dtype='unicode')
print(np_data)

# 出力
# [['1' 'apple']
# ['2' 'lemon']
# ['3' 'orange']]

無論、Numpy配列は異なるデータ型を持てないため、数値や文字列が混在している場合、全て文字列として格納されます。

【Udemy】現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイル

【Udemy】みんなのAI講座 ゼロからPythonで学ぶ人工知能と機械学習 【2021年最新版】 【Google Colaboratory対応】初心者向けの人

以上です。次は最後です。「ライブラリ紹介」について説明します。