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

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

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

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

Q&A

解決済

1回答

806閲覧

複数のtxtファイルを作成済みのコードに当てはめ1つずつ処理したいです

Nari9113

総合スコア3

Python

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

0グッド

0クリップ

投稿2021/12/15 04:37

編集2021/12/15 10:52

前提・実現したいこと

Python使い始めて約一か月の初心者なので力を貸してください

txtファイル2th-scan_BLT1.txt~2th-scan_BLTn.txt(nは数)を下記コードで1つずつ処理をしたいです。
下記コードは「input(入力データ)」の部分に手入力で『2th-scan_BLT1.txt』のように入力すれば処理されます。
複数のファイルを与えられたとき一つ一つ入力が大変なので自動処理できるよう変更すべき点を教えて頂きたいです。
色々調べたのですがtxtだったりskiprowsだったりx,yで必要な値を抜き出しているようなものがなかったので、、

コードを記載していただけると助かります、、
必要な情報があればコメント頂ければ記載します!

該当のソースコード

Python

1from scipy.optimize import curve_fit 2import matplotlib.pyplot as plt 3import matplotlib.cm as cm 4import pandas as pd 5import numpy as np 6from scipy import signal 7import os 8from scipy.signal import find_peaks 9 10 11datafile=input("入力データ") 12 13x, y = np.loadtxt(datafile, skiprows=29, unpack=True) 14 15 16

試したこと

https://ja.stackoverflow.com/questions/45204
https://masaeng.hatenablog.com/entry/2020/06/28/233020
などのサイトも確認しましたがx,yの壁が立ちはだかりチンプンカンプンでした

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

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

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

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

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

1T2R3M4

2021/12/15 04:45 編集

泣txtファイル 泣コード とはどんなものでしょうか。 あと最後の()内も意味がわかりません。
Nari9113

2021/12/15 04:49

繋がっていたので消しておきました
guest

回答1

0

ベストアンサー

まずは、目標として、

python

1data_file_list = <対象ファイルのリスト> 2 3for data_file in data_file_list: 4 process(data_file)

のように処理できるようにするのがいいと思います。

ここでの対象ファイルのリストは、どこかのディレクトリ配下のファイル一覧を取得するでも、スペース区切りで入力されたものを分割したリストでもいいでしょう。

process()関数は、現在のファイルでトップレベルで記述されている処理を関数化して作ります。
「x, y = np.loadtxt(datafile, skiprows=29, unpack=True)」 の行と、「#初期値のリストを作成」以下の部分をそっくり 「def rocess():」の中に入れてしまえばだいたい動くんじゃないでしょうか。
ただ、「detect_peak()」はx, yをglobalするのを止めて、引数で受け取るようにしたほうがいいですね。 ほかにもあるかもしれませんが見てません。

まず最初の目標は、

python

1datafile=input("入力データ") 2process(datafile)

として、これまでどおりに動くようにすることになりますね。


追記

process()を作るというのはだいたいこんな感じで、detect_peak関数などを中に入れるのではなくて、同じレベルに記述します。

python

1def process(datafile): 2 x, y = np.loadtxt(datafile, skiprows=29, unpack=True) 3 4 #初期値のリストを作成 5 #[amp,ctr,wid] 6 7 # x1, y1 = detect_peak() ## 8 np_x, np_y = detect_peak() ## 9・・省略・・ 10 csv_datafile=input("保存データ名") 11 df_h_in.to_csv(csv_datafile, sep=",",index=False)

これを、もとは「#初期値のリストを作成」のところに記述することになります。

そして、最後に、

python

1datafile=input("入力データ") 2process(datafile)

と書いて、もとのファイルと同じどうさをするようになればOK

投稿2021/12/15 05:57

編集2021/12/15 07:21
TakaiY

総合スコア12765

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

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

Nari9113

2021/12/15 06:40

変更部分を追記で載せさせていただきました process関数の使い方をあまり理解できておらずすみません 入力の流れは変更追記のコードのようになるのでしょうか、?
TakaiY

2021/12/15 07:13

違います。 それでは回答に書いたとおりではありません。 回答をちょっと追記しておきます。
Nari9113

2021/12/15 07:38

あ、該当コードをprocess()という1つの大きな関数にして、最後のでこのデータをprocess()で処理してくれーとなるのですね! その際def detect_peakは入れ込めなくなるということですか?
TakaiY

2021/12/15 07:59

そういうことです。 > その際def detect_peakは入れ込めなくなるということですか? いいえ。入れ込むこともできますが、関数の外で定義した関数も問題なく 呼べるので、外に出してあったほうが管理が楽です。 今の作りでは、外に出しておく利点はありませんが、将来大きなものを作るとき、特定の機能を持った処理=関数を適切に定義して作ることで設計も管理もしやすくなります。 そして、もういちど書いておきますが、「detect_peak()」はx, yをglobalするのを止めて、引数で受け取るようにしたほうがいいです。
Nari9113

2021/12/15 08:40 編集

globalをやめて、 datafile=input("入力データ") process(datafile) でできるようになりました!!このコードを data_file_list = <対象ファイルのリスト> for data_file in data_file_list: process(data_file) に変えて、 <対象ファイルのリスト>は[]内にファイル名打ち込む形式でいいのでしょうか?
TakaiY

2021/12/15 08:49

> <対象ファイルのリスト>は[]内にファイル名打ち込む形式でいいのでしょうか? はい。まずはそれでいいんじゃないでしょうか。 今後のことを考えたら、たとえば入力時にリストで渡せるようにするとか、ディレクトリ内にあるすべてのファイルのリストを取得してそれを処理するみたいなこともやっていけばいいのではないかと。 ディレクトリ内のリストの取得は、globモジュールのglobや、pathlibのglob(個人的にはこっち)を使うのがいいでしょう。
Nari9113

2021/12/15 09:03

分かりました! 細かく教えて頂きありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問