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

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

新規登録して質問してみよう
ただいま回答率
85.35%
多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Python

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

配列

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

Q&A

2回答

1211閲覧

パイソンにて、16行x任意の列数 のテキストファイルをはいれつに読み込む方法をおしえていただきたいです。

tamago_yaki

総合スコア2

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Python

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

配列

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

0グッド

0クリップ

投稿2020/10/16 11:34

編集2020/10/16 15:35

前提・実現したいこと

テキストファイルをパイソンにて読み込みたいのですが、
1つの数字に1つ配列を渡すことができずに困っています。

4 7 5 7 9 8 9 10 10 13 11 13 16 15 16 14 15 12 14 8 9 10 11 12 5 7 8 6 2 6 1 2 1 3 3 4 1 3 4 5 6 2 11 13 16 15 14 12

このテキストファイルを、一文字ごとに、配列に入れたいです。

該当のソースコード

python

1fd = open('N.txt') 2arr= fd.read() 3l = arr.split('\n') 4N = {} 5e = 0 6num=16 7for i in range(0,num): 8 N[e]=l[i] 9 e = e+1 10print(N[0]) 11for i in range(0,num): 12 l[i][j],l[i][j] = N[i].split(' ') 13print(l)

スペースごとに分けて、行ごとに配列にわけることはできたのですが、
それぞれの要素を、リストにわけることができませんでした。
また、全て文字コードになってしまったため、配列から数字が読みだせませんでした。

A[0] によって1行目 A[0][0] によって 4,A[0][1] によって 7 , A[0][2] によって 5

となるようにしたいです。

試したこと

ほかにも
readlines(), readline(), loadtxt() など試してみたのですが、
どれも要素ごとにはわけられませんでした。
また、ライブラリーもいくつかためしたのですが、 エラーが絶えませんでした、

書いているうちに、ファイルの読み込みだけでかなりの行数になってしまい、わからなくなってしまいました。
どのようにすれば列が違うものでも、loadtxt() のように一つ一つの数字が読み込めるのか、おしえていただけませんでしようか。

教えていただいたもの

python

1N = [] 2fd = open('N.txt') 3read_lines = fd.readlines() 4#print(read_lines) 5for s in read_lines: 6 s=s.rstrip('\n') 7 s_list=s.split(' ') 8 num_list = [int(x) for x in s_list] 9 N.append(num_list)

python

1with open("N.txt") as fp: 2 A = [*map(str.split, fp)] 3print(A)

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

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

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

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

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

meg_

2020/10/16 11:41

テキストファイルはスペース区切りですか?
tamago_yaki

2020/10/16 14:51

質問ありがとうございます。 は、テキストはすべてスペースで区切ってあります。
guest

回答2

0

こういう処理は、ステップ毎に何が得られるか考えながら進めるのがいいと思います。ソース全部書くのもなになので、流れだけ。

行ごとに処理をするので、readlines()で全部読み込んでしまうか、readline()で1行ずつ読込みながら処理するかですが、readlines()でやるとしましょう。

  1. 空のリスト(arr)を用意する。
  2. ファイルをオープンする。
  3. オープンしたファイルの行を全部読む read_lines = fd.readelines() arrには行の文字列がリストになって入っている = ['4 7 5', '7 9 8', ...]
  4. 読んだリストの内容を1つずつ処理。for s in read_lines:
    a 文字列から改行をとりのぞく。
    b 文字列をスペースで分割する。(s_list)にいれる。
    c 文字を数字に変換する。 num_list = [int(x) for x in s_list]
    d arrにnum_listを追加する。

こんな感じでどうでしょう。 (だいぶ書いちゃいましたけど)

投稿2020/10/16 11:59

TakaiY

総合スコア13790

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

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

tamago_yaki

2020/10/16 15:33

細かくおしえて下さり、本当にありがとうございました! 教えてくださったとおりコードを書いてみて、自分の欲しい答えが見えるようになりました。 「文字列をスペースで分割する」というものが自分ではおもいつきませんでした。 ほんとうにありがとうございました。 ''''python N = [] fd = open('N.txt') read_lines = fd.readlines() #print(read_lines) for s in read_lines: s=s.rstrip('\n') s_list=s.split(' ') num_list = [int(x) for x in s_list] N.append(num_list) '''
guest

0

python

1with open("N.txt") as fp: 2 A = [*map(str.split, fp)] 3print(A)

投稿2020/10/16 11:41

YouheiSakurai

総合スコア6142

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

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

tamago_yaki

2020/10/16 15:32

ご回答本当にありがとうございます! また、こんなやり方があるのか。。。と驚きでした。 10行も20行も書いていたものが、たった2行で!?と、もうすこしポインタについて勉強しないととかんじました。おしえていただき、本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問