質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

2回答

778閲覧

異なるフォルダにあるCSVデータを読み出して配列に格納したい

BuhKeil

総合スコア34

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2020/08/24 11:41

実現したいこと

異なるフォルダにある複数のCSVファイルを読み出し、配列に格納したいです(本当はその先に、それらの配列を使ってMatplotlibでグラフを描画したい)。この質問では、配列に格納するところまでを質問の対象とさせてください。

処理対象のCSVフォーマット

ファイルは全てCSV形式で共通です。具体的には、以下のように、各行に3つの数値がカンマで区切られています。行数はファイルによって異なります。データは左から、周波数(変数名:freq)、抵抗A(変数名:ReA)、抵抗B(変数名:ReB)、の順で並んでいます。

1037,534,823
984,345,923
589,473,253
769,512,458

###環境
Windows10 Pro (version 1909)
Python (version 3.8.3)
Spyder (version 4.1.3)

###やったこと

python

1filename = ["c:\hoge\aaa.csv","c:\data\bbb.csv","c:\test\ccc.csv"] 2 3for k in range(len(filename)): 4 datalist = list() 5 freq = list() 6 ReA = list() 7 ReB = list() 8 9 fp = open(filename[k], mode="r", encoding="cp932") 10 datalist[k] = fp.readlines() 11 12 for i in range(len(datalist[k])): 13 freq_value[k][i], ReA_value[k][i], ReB[k][i] = datalist[k][i].rstrip().split(",") 14 freq[k].append(int(freq_value[k][i])) 15 ReA[k].append(int(ReA_value[k][i])) 16 ReB[k].append(int(ReB_value[k][i])) 17 fp.close()

出力されるエラー

実行すると、
datalist[k] = fp.readlines()
の行でエラーが発生します。その理由は、
list assignment index out of range
と出ます。ググると、「存在しない要素にアクセスしようとしているから」とあります。
k値は0,1,2と明確になっていると思うのですが、何が間違っているのでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

インデックス(iとかjとかkとか)に囚われすぎじゃないですかね。

Python

1filename_list = ["c:\hoge\aaa.csv", "c:\data\bbb.csv", "c:\test\ccc.csv"] 2 3freq = list() 4ReA = list() 5ReB = list() 6 7for filename in filename_list: 8 fp = open(filename, mode="r", encoding="cp932") 9 freq.append(list()) 10 ReA.append(list()) 11 ReB.append(list()) 12 for x in fp.readlines(): 13 freq_value, ReA_value, ReB_value = x.rstrip().split(",") 14 freq[-1].append(int(freq_value)) 15 ReA[-1].append(int(ReA_value)) 16 ReB[-1].append(int(ReB_value)) 17 fp.close() 18 19print(freq) 20print(ReA) 21print(ReB)

投稿2020/08/24 12:39

Daregada

総合スコア11990

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Python

1for k in range(len(filename)): 2 datalist = list() 3 freq = list() 4 ReA = list() 5 ReB = list()

上記でdatalistを初期化していますが、値を追加していないのでdatalist[k]IndexError: list assignment index out of rangeとなります。
またループ処理内で毎回datalistを初期化しているのでK値でアクセス出来ません。

投稿2020/08/24 12:10

meg_

総合スコア10760

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問