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

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

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

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

文字コード

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

Python

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

Q&A

解決済

1回答

7376閲覧

Python3の%演算子の文字列フォーマットの使用方法

maguro2020

総合スコア34

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

文字コード

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

Python

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

0グッド

0クリップ

投稿2020/05/29 10:07

#前提・実現したいこと
機械学習でμ’sの声を識別する
上記のサイト様を参考に電話の音とチャイムの音を識別するコードを作成したいと考えております。

#発生している問題・メッセージ
TypeError: not all arguments converted during string formatting

上記のエラーメッセージが発生してしまいどのように変更をすればいいのかわからない状態です。

#コード

import

1import librosa 2from sklearn.svm import SVC 3import numpy 4 5def getMfcc(filename): 6 y, sr = librosa.load(filename) 7 return librosa.feature.mfcc(y=y, sr=sr) 8 9artists = ['bell', 'call'] 10songs = [ 11 'call01','call02','call03','call04','call05', 12 'bell01','bell02','bell03','bell04', 'bell05','bell07','bell08','bell09','bell10','bell11','bell12','bell13' 13] 14 15song_training = [] 16artist_training = [] 17for artist in artists: 18 print('Reading data of %s...' % artist) 19 20for song in songs: 21 mfcc = getMfcc('%s.wav' 22 % (artist, song)) 23 song_training.append(mfcc.T) 24 label = numpy.full((mfcc.shape[1], ), 25 artists.index(artist), dtype=numpy.int) 26 artist_training.append(label) 27song_training = numpy.concatenate(song_training) 28artist_training = numpy.concatenate(artist_training)

#エラーメッセージ

--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-44-09c9c22148b8> in <module> 21 for song in songs: 22 mfcc = getMfcc('%s.wav' ---> 23 % (artist, song)) 24 song_training.append(mfcc.T) 25 label = numpy.full((mfcc.shape[1], ), TypeError: not all arguments converted during string formatting

#試していること
Pythonの%演算子による文字列フォーマット
現在、上記のサイト様にヒントがあるのではないかと調べている状況です。

#補足
使っているパソコンはmacOS Sierra バージョン10.12.6です。
pythonのバージョンは3.6.5です。

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

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

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

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

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

guest

回答1

0

ベストアンサー

not all arguments converted during string formatting

% によるフォーマットの場合、文字を埋め込む場所を示す %s などの書式指定子の数と埋め込む値を示すタプルの要素数が一致していない場合はエラーとなります。

例えば、以下の場合、書式指定子は %s の1つしかないのに、タプルは要素が2つなのでエラーとなります。

python

1"%s" % ("a", "b") 2# TypeError: not all arguments converted during string formatting 3

エラーの行を見ると、上記問題が発生していることがわかります。

mfcc = getMfcc('%s.wav' % (artist, song))

追記

call(フォルダ)のcall01.wav、call02.wav…call05.wav(wavファイル)とbell(フォルダ)の中にあるbell01、bell02…bell13.wav(wavファイル)を探すようにすることは可能でしょうか?

とりあえず正しいパスを書式指定子で作成するのであれば、以下のようにすればいいと思います。

python

1artists = ["bell", "call"] 2songs = [ 3 [ 4 "bell01", 5 "bell02", 6 "bell03", 7 "bell04", 8 "bell05", 9 "bell07", 10 "bell08", 11 "bell09", 12 "bell10", 13 "bell11", 14 "bell12", 15 "bell13", 16 ], 17 ["call01", "call02", "call03", "call04", "call05"], 18] 19 20for artist, artist_songs in zip(artists, songs): 21 for song in artist_songs: 22 path = "%s/%s.wav" % (artist, song) 23 print(path)
bell/bell01.wav bell/bell02.wav bell/bell03.wav bell/bell04.wav bell/bell05.wav bell/bell07.wav bell/bell08.wav bell/bell09.wav bell/bell10.wav bell/bell11.wav bell/bell12.wav bell/bell13.wav call/call01.wav call/call02.wav call/call03.wav call/call04.wav call/call05.wav

投稿2020/05/29 10:14

編集2020/05/30 17:19
tiitoi

総合スコア21956

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

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

maguro2020

2020/05/29 10:42

ご回答いただきありがとうございます。tiitoi様。 大変失礼いたしました。元のサイト様のコードも ``` mfcc = getMfcc('%s.wav' % (artist, song)) ``` ではなく ``` mfcc = getMfcc('%s/%s.wav' % (artist, song)) ``` となっていたおりました。そこでコードを修正いたしましたところ、 「RuntimeError」 と「FileNotFoundError」の二つのエラーが発生してしまいました。とりあえず、一旦「RuntimeError」のほうはまた別の質問で解決したいと思うのですが、もう片方の「FileNotFoundError」についてはもう少しだけ質問をさせてください。 #エラーメッセージ(全文) ``` FileNotFoundError Traceback (most recent call last) <ipython-input-49-f31657bbf333> in <module> 21 for song in songs: 22 mfcc = getMfcc('%s/%s.wav' ---> 23 % (artist, song)) 24 song_training.append(mfcc.T) 25 label = numpy.full((mfcc.shape[1], ), <ipython-input-49-f31657bbf333> in getMfcc(filename) 5 6 def getMfcc(filename): ----> 7 y, sr = librosa.load(filename) 8 return librosa.feature.mfcc(y=y, sr=sr) 9 ~/.pyenv/versions/3.6.5/lib/python3.6/site-packages/librosa/core/audio.py in load(path, sr, mono, offset, duration, dtype, res_type) 160 if isinstance(path, six.string_types): 161 warnings.warn('PySoundFile failed. Trying audioread instead.') --> 162 y, sr_native = __audioread_load(path, offset, duration, dtype) 163 else: 164 six.reraise(*sys.exc_info()) ~/.pyenv/versions/3.6.5/lib/python3.6/site-packages/librosa/core/audio.py in __audioread_load(path, offset, duration, dtype) 184 185 y = [] --> 186 with audioread.audio_open(path) as input_file: 187 sr_native = input_file.samplerate 188 n_channels = input_file.channels ~/.pyenv/versions/3.6.5/lib/python3.6/site-packages/audioread/__init__.py in audio_open(path, backends) 109 for BackendClass in backends: 110 try: --> 111 return BackendClass(path) 112 except DecodeError: 113 pass ~/.pyenv/versions/3.6.5/lib/python3.6/site-packages/audioread/rawread.py in __init__(self, filename) 60 """ 61 def __init__(self, filename): ---> 62 self._fh = open(filename, 'rb') 63 64 try: FileNotFoundError: [Errno 2] No such file or directory: 'call/bell01.wav' ``` 自分の作業している状態は以下のようになっております。 Desktop │ └bell_call(フォルダ)※作業ディレクトリです    │    ├bell(フォルダ)    │└bell01.wav,bell02.wav…bell13.wav(wavファイル)    │ └call(フォルダ)     └call01.wav,call02.wav…call05.wav(wavファイル) という状況で作業をしております。上記のエラーメッセージを考慮すると、このコードでは「call/bell01.wav」というwavファイルを探してしまうことになってしまうのでしょうか?
maguro2020

2020/05/29 10:44

申し訳ありません。「call(フォルダ)」の位置がずれてしまいました。「call(フォルダ)」は「bell(フォルダ)」と同じ場所にあります。
tiitoi

2020/05/29 10:58

> 「call/bell01.wav」というwavファイルを探してしまうことになってしまうのでしょうか? はい、そうなります。カレントディレクトリが bell_call ならば、 bell_call/call/bell01.wav を探していることになります。
maguro2020

2020/05/30 15:49

返信が遅れてしまい申し訳ありません。 やはりそうでしたか…ご回答いただきありがとうございます。何度もtiitoi様に質問をしてしまい、申し訳ないのですが、自分が質問の際に挙げた「コード」は改良を加えることにより、bell_call(フォルダ)の中にあるcall(フォルダ)のcall01.wav、call02.wav…call05.wav(wavファイル)とbell(フォルダ)の中にあるbell01、bell02…bell13.wav(wavファイル)を探すようにすることは可能でしょうか?
tiitoi

2020/05/30 17:20

とりあえず正しいパスを書式指定子で生成する方法は追記しました。 ただ、他の部分のコードの流れと辻褄が合うかどうかはわかりません。
maguro2020

2020/05/31 14:15

わざわざコードまで作成していただきありがとうございます。質問の際のコードをtiitoi様のご指摘どおりに変更いたしましたところ、無事に正しいパスを書式指定子で生成することができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問