外部ファイルの読み込み、改行の削除、配列への代入、2列の配列、日付の取得、書き出しを簡単にまとめ(テンプレート)

ここの詳細は、各々Googleで検索して頂ければ、分かりやすいページが無数に出てくるかと思います。ここでは、私が実際に作って動作が確認できているソースコードを掲載しておきます。
色々調べても行き詰まっている人がいたら、何か少しでも参考になれば嬉しいと思います。
キーワードとしては、
・readlines()でtxtファイルを1行ずつ読み込んで、lines配列に保存。
lines = file_data.readlines()
・開いたファイルは必ずすぐに閉めましょう。ファイルを開いてから閉じるまでの間にエラーが発生した場合、ファイルがずっと開いたままで、ファイル削除ができなくなります。
file_data.close()
・1行目(lines[0])の情報を変数aに保存しておいて、好きな時に使えるようにしておく方法と、1行目の情報を改行( " \ n " )に置き換える方法。
a = lines[0].rstrip('\n')
lines[0] = "\n"
・三項演算子
・改行行以外の行をlines4配列に格納することで、改行(空白行)を削除する。
#改行行の削除
lines4 = [a for a in lines3 if a != '\n']
・csvファイルにするために、特定文字(タブ)をカンマ(,)に変換、及びタブ区切りコマンドs.split()(カンマ区切りの場合のみ、s.split()の()内はカラで良い)。
#"タブ"を含む要素の"タブ"文字を",”に置換する
#lines4 = [s.replace("\t",",") for s in lines3]
#タブ区切りを配列に変換
lines5 = [s.split() for s in lines4]
・pandasのDataFrame
・DatetimeIndex
・数値が"object"型になっているので、float型に変換
・月毎の集計、年毎の集計(合計はsum、平均化はmean)pd.DataFrame(df_ym["調整後終値"].mean(level=["year","month"]))
・DataFrame(df_ym2配列)を加工するため、DataFrameのIndexをリセット(リセットすることで、インデックスを担っていた列も多次元配列に帰ってくる)df_ym2.reset_index(inplace = True)
・配列をDataFrameとしていれば、csvファイルへの出力がすごく簡単。(for文やfileopenが不必要)
df_ym3.to_csv(a+".csv", sep=",")

ファイルの読み書きのソースコード

以下ソースコードです。少しでも参考になれば幸いです。
import pandas as pd
import numpy as np

#ファイルを開く, r:読み取りモード
file_data = open("data/7203.txt", "r")
zika = 10
#全ラインを行列に保存
lines = file_data.readlines()
#ファイルを閉じる
file_data.close()

#銘柄名削除
a = lines[0].rstrip('\n')
lines[0] = "\n"
#"日付"を含む要素を丸ごと改行に置換。三項演算子という
lines2 = ["\n" if "日付" in s else s for s in lines]
#"分割"を含む要素を丸ごと改行に置換。三項演算子という
lines3 = ["\n" if "分割" in s else s for s in lines2]
#改行行の削除
lines4 = [a for a in lines3 if a != '\n']
#"タブ"を含む要素の"タブ"文字を",”に置換する
#lines4 = [s.replace("\t",",") for s in lines3]
#タブ区切りを配列に変換
lines5 = [s.split() for s in lines4]

#リストをpandasのDataFrameに変換
df = pd.DataFrame(lines5,columns=["日付","始値","高値","安値","終値","出来高","調整後終値"])
#DataFrameの"日付"列をdatetime64[ns]型に変換し、DatetimeIndexとして指定する
df["日付"] = pd.to_datetime(df["日付"])
df.set_index("日付", inplace=True)
#タブ区切りの際に数値が"object"型になっているので、float型に変換する
df["調整後終値"]=df["調整後終値"].astype(float)
print(df["調整後終値"].dtype) #一応型が数値型に直っているか確認

#YearとMonthのインデックスを作成
df_ym = df.set_index([df.index.year, df.index.month, df.index])
df_ym.index.names = ['year','month', 'date']
df_ym.sort_index(inplace=True) #日付順に整列(昇順)
#月毎の平均値を算出
df_ym2 = pd.DataFrame(df_ym["調整後終値"].mean(level=["year","month"]))
print(df_ym2)
#結合
df_ym2.reset_index(inplace = True)

arr = np.empty((0,2), int)
arr=np.append(arr, np.array([["",""]]), axis=0)
for i in range(0,len(df_ym2)):
    s = str(df_ym2["year"][i])+"-"+str(df_ym2["month"][i])
    arr=np.append(arr, np.array([[s,df_ym2["調整後終値"][i]*zika]]), axis=0)
#csv出力
df_ym3 =pd.DataFrame(arr,columns=["",a])
df_ym3.set_index("", inplace=True)

df_ym3.to_csv(a+".csv", sep=",")


みんながみんな、ローカルフォルダに眠っているファイルをネットで共有したら、ほんの少し良い世界に

個々の解説記事を読んでも、コーディングがうまくいかない時、ずーーーっとネット検索を繰り返しながら、よく悩んでいます。熟練者から見たら「その悩む経験が、自分の力になる」と言いますが、それでも、ネット検索で自分と近しいことをやっている人がいて、参考となる答えが掲載されてると助かります。



私もそんな1人になれたらと思います。