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

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

ただいまの
回答率

90.75%

  • Python

    6888questions

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

  • Python 3.x

    5334questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

python3で複数のファイルから数値を読み取る方法

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 469

kamome01

score 5

前提・実現したいこと

python3で複数ファイルから数値を読み取るコードが書きたいのですがどうして良いかわかりません.
ひとつのファイルから数値を読み込むのには成功しています.

発生している問題・エラーメッセージ

ファイル名を1つ指定した場合は読み込めるのですが、*.datとした場合にエラーが出ます.

FileNotFoundError: [Errno 2] No such file or directory: '*.dat'

該当のソースコード

import numpy as np
a=np.loadtxt('*.dat',delimiter=' ',usecols=0) 
b=np.loadtxt('*.dat',delimiter=' ',usecols=1)
c=np.loadtxt('*.dat',delimiter=' ',usecols=2)
d=np.loadtxt('*.dat',delimiter=' ',usecols=3)
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

+3

usecolsあたりの規則性をエスパー忖度してみました。以下コードでどうでしょうか?
(9割方求めるものとは違うと予想)

import glob
# ファイルパス昇順で取得
paths = sorted([path for path in glob.glob('*.dat')])
print(paths)

# ファイル毎に読込
ret = [] # a,b,c,dの代わり
for idx,path in enumerate(paths):
    ret.append( np.loadtxt( path, delimiter=' ',usecols=idx)

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/22 14:57

    複数ファイルを参照しつつ1行ずつずらしながら取り出すという動きを想定するのであれば自分の回答よりこちらの回答が正しいです。

    キャンセル

checkベストアンサー

+2

numpyのloadtxtはワイルドカードを使った読み込みはできないようです。
numpy.loadtxt
ワイルドカードを使ってやるのであればglobを使ってファイルパスを取得してnumpy.loadtxtに渡す方法がよいと思います。

import glob
import numpy as np

dat_paths = glob.glob("*.dat")
data = [np.loadtxt(dat_path, delimiter="") for dat_path in dat_paths]


ライブラリリファレンス - glob

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/22 14:56 編集

    dat_paths = glob.glob("pre*.dat")
    a = [np.loadtxt(dat_path,delimiter=' ',usecols=0)for dat_path in dat_paths]
    b = [np.loadtxt(dat_path,delimiter=' ',usecols=3)for dat_path in dat_paths]
    c = [np.loadtxt(dat_path,delimiter=' ',usecols=1)for dat_path in dat_paths]
    d = [np.loadtxt(dat_path,delimiter=' ',usecols=2)for dat_path in dat_paths]
    と書き換えたのですが、
    A.py:24: UserWarning: loadtxt: Empty input file: "02.dat"
    a = [np.loadtxt(dat_path,delimiter=' ',usecols=0)for dat_path in dat_paths]
    というWarningが大量に出て、その後の処理でエラーが出ます。
    その後の処理はファイル単体を読み込んだ時にはエラーが出ていなかったものです.

    キャンセル

  • 2017/12/22 15:01

    まずdat_pathsの中身を見てどうなっているかを確認してから、以降のコードを書くことをおススメします。また、datファイルの中身と何行目を取得したいのかがわからないのでusecolsをどう使われたいのかよくわかりませんでしたので教えてもらえますか。

    キャンセル

  • 2017/12/22 15:08

    datの中身は
    -0.20711 4.71328 142.647 0
    -0.221705 3.73428 -1088.54 0
    -0.2085 6.01897 -2864.62 0

    といったようにスペースで区切られた4列のデータになっています。
    それを1列目はa,2列目はbと言ったように値を格納したいのです。
    説明が足らず申し訳ございません

    キャンセル

  • 2017/12/22 15:19

    datの中身は上記のようになっていて複数あり、列を指定して読み込むということであっていますか。

    キャンセル

  • 2017/12/22 15:21

    書いていて気になったのですがdatのファイル名と何列目を取り出したいというのはどう対応していますか?特に対応しておらず読み込んだ順番に1列目、2列目とずらしていくかたちですか?

    キャンセル

  • 2017/12/22 15:24

    はい。このような形式のファイルが複数あります。
    例えば、上記の状態であれば
    a=[-0.20711,-0.221705,-0.2085,…]
    b=[4.71328,3.73428,6.01897,…]
    c=[142.647,-1088.54,-2864.62,…]
    d=[0,0,0,…]
    と格納したいのです

    キャンセル

  • 2017/12/22 15:30

    すみません,wakane様の回答通りに実装した以降の問題は、自己解決しました。
    親切かつ的確な対応ありがとうございます。

    キャンセル

+1

*.dat という正規表現が使えないのでは?
こちらの文献などを参考に作ってみてはいかがでしょうか↓

Pythonの正規表現メモ

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.75%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Python

    6888questions

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

  • Python 3.x

    5334questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。