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

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

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

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

Q&A

解決済

CSVへのデータ入力【TypeError: unsupported operand type(s) for %: 'int' and 'tuple'】

kagakun
kagakun

総合スコア1

Python

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

2回答

0グッド

0クリップ

165閲覧

投稿2022/12/05 10:40

こんにちは。

現在、自分で作成したデータをcsvへと変換するプログラムの作成を試みています。

open関数でcsvを作成し、for文で用意したデータのリスト([i]とナンバリングし数値にしてます)と1つの値の数値のペアをリストの要素分だけの行のcsvを作成しようとしてます。

ここで、数式や計算は何度もテストで走らせ確認し、間違いが無いのが確認できたのですがcsvの書き込みのところで'int'と'tuple'のエラーが出てきました。入力する際は数値になっているはずなので、解決方法が分からず困ってます。どうかよろしくお願いします。

コード全体:
#!/usr/bin/env python

import os
import numpy as np
import pandas as pd

datadir = 'rad'
cmd ='rm -rf %s; mkdir -p %s' % (datadir,datadir) #ディレクトリの更新

print(cmd);os.system(cmd)
#dNa+1になった瞬間、rangeは終わる。つまりdNa+1は存在しない値を持つ。

s_Na = 830
e_Na = 956
dNa = e_Na - s_Na +1
Na = np.arange(s_Na ,e_Na+1 ,1)

s_Cs = 1125
e_Cs = 1230
dCs = e_Cs - s_Cs +1
Cs = np.arange(s_Cs ,e_Cs+ 1 ,1)

s1_Eu = 344
e1_Eu = 460
dEu1 = e1_Eu - s1_Eu +1
Eu1 = np.arange(s1_Eu ,e1_Eu+ 1 ,1)

s2_Eu = 520
e2_Eu = 624
dEu2 = e2_Eu - s2_Eu +1
Eu2 = np.arange(s2_Eu ,e2_Eu+ 1 ,1)

s3_Eu = 1694
e3_Eu = 1765
dEu3 = e3_Eu - s3_Eu +1
Eu3 = np.arange(s3_Eu ,e3_Eu+ 1 ,1)

s4_Eu = 1824
e4_Eu = 1850
dEu4 = e4_Eu - s4_Eu +1
Eu4 = np.arange(s4_Eu ,e4_Eu+ 1 ,1)

f = open('%s/spe.csv' %datadir,'w') #ファイルの作成
f.write('%d,%f\n') %(Na[i],511)
f.close

結果:
rm -rf rad; mkdir -p rad
Traceback (most recent call last):
File "/Users/hirokikato/Desktop/MyPython/207mkcsv.py", line 46, in <module>
f.write('%f,%f\n') %(1,511)
TypeError: unsupported operand type(s) for %: 'int' and 'tuple'

以下のような質問にはグッドを送りましょう

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

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

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

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

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

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

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

適切な質問に修正を依頼しましょう。

回答2

0

%を使って文字列の置換をしたいのであれば、「)」の位置が間違えているのでしょう。

python

1f.write('%d,%f\n' % (Na[i],511))

ところで、このコードだと変数iが未定義ですし、エラーにはNa[i]の代りに1が入っているようですが、そのあたりは大丈夫でしょうか。

ちなみに、「%」を使った文字列の操作は古い書き方ですので、古いpython2系列を使う必要がないのであれば、f文字列やformatメソッドを使うことをお勧めします。
f文字列だと

python

1f.write(f'{Na[i]}, 511\n')

投稿2022/12/05 11:11

TakaiY

総合スコア10557

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

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

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

このような回答には修正を依頼しましょう。

回答へのコメント

kagakun

2022/12/06 01:16

細かな解説ありがとうございました! 質問用に[i]については書き直しちゃって、for文の記述も忘れてました! 無事かいけつできました、ありがとうございます♪

0

python

1f.write('%d,%f\n') %(Na[i],511) 2close

python

1f.write(('%d,%f\n') %(Na[i],511)) 2close()

としてみてはいかがでしょうか。

投稿2022/12/05 11:11

qnoir

総合スコア7910

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

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

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

このような回答には修正を依頼しましょう。

回答へのコメント

kagakun

2022/12/06 01:16

解決できました!ありがとうございました♪

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

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

Python

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