Pythonのreadlineについて

このQ&Aのポイント
  • Pythonのreadlineを使ってテキストファイルの読み込みを行いたい
  • 読み込んだテキストファイルの各行から特定の数字を抜き出して変数に格納したい
  • 読み込みや数字の抜き出し方法についてのアドバイスをお願いします
回答を見る
  • ベストアンサー

Pythonのreadlineについて

最近Pythonのプログラミングを始めたのですが、Pythonのプログラミングについて以下のことを行いたいのですが、やり方が分からず困っております。 Pythonで行いこと 1.textファイルに例えば以下のようにいくつかの係数を入力しておきます。 a:0.5, b:0.8, c:0.9 2.上記のテキストファイルを読み込み、pythonの変数a、b、cに値を格納したいと考えています。 色々検索している中でテキストファイルの読み込みはf=open(xxx.txt)で読み込み、各行の読み込みはreadline()というコマンドでできることは分かったのですが、lines=f.readline()とした後、その"line"の中からaが0.5、bが0.8という数字部分だけを切り出してプログラム中の変数に渡す方法が分からない状態です。 皆様のお知恵を拝借いたしたく、宜しくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • grazie
  • ベストアンサー率56% (200/355)
回答No.2

readlines()は配列を返す関数なのでエラーになります。 lines =r.readlines() for line in lines: print line とすればどうでしょうか?

220F284
質問者

お礼

grazie様、度々のご回答ありがとうございました。 ご回答いただきました対応で、おかげ様でうまくいきました。 どうもありがとうございました、これで目的のプログラムが作成できそうです。

その他の回答 (1)

  • grazie
  • ベストアンサー率56% (200/355)
回答No.1

こんな感じでしょうか? line = 'a :0.5 , b : 0.8 , c: 0.9 ' objs = [] for s in line.split(','): lst = s.split(':') objs.append( dict.fromkeys(lst[0].strip(),lst[1].strip()) ) #objsが辞書のリストになります。 print objs print objs[0]['a'] print objs[1]['b'] print objs[2]['c']

220F284
質問者

お礼

grazie様、早速のご回答ありがとうございます。 すみません、初めて投稿したため、使い方が分からずにお礼を細くに書き込んでしまいました。 補足に詳細記載したのですが、1点分からないことがありまして、もし分かりましたら合わせてご教授いただけますと助かります。 宜しくお願いいたします。

220F284
質問者

補足

grazie様、早速のご回答ありがとうございます。 「split」で分ければいいんですね。基本的なことなのかもしれませんが、教えていただき非常に助かりました。 ただ、1点ご回答いただいた方法でうまくコンパイルはできたのですが、textファイルの読出しから行おうとすると、for s in line.split(','):の部分で以下のエラーが出てしまいます。(textファイルにはa :0.5 , b : 0.8 , c: 0.9と記載しております。) AttributeError: 'list' object has no attribute 'split' 変更点は、 line = 'a :0.5 , b : 0.8 , c: 0.9 ' の部分を f=open('sample.txt') line=f.readlines() f.close() に変更しただけなのですが、、、。 line=にした場合と、f=openでlineを指定した場合とでなにか違うのかと思い、textファイルから読みだした時のlineを出力してみると、 以下のようになっておりました。 ['a :0.5 , b : 0.8 , c: 0.9'] ご回答いただきました「line = 'a :0.5 , b : 0.8 , c: 0.9 '」のように直接代入した場合は a :0.5 , b : 0.8 , c: 0.9 と出力されるようですので、['と']の部分がsplitがうまく働かない要因かと思うのですが、readlines()で['~']の形で読み込まないよ うにすることはできるのでしょうか? もしくは['と']の部分をsplitで分けることを考えた方がよいでしょうか。 重ねての質問で申し訳ございませんが、もし分かりましたら教えていただけると助かります。 なお、Pythonは3.4を使用しております。

関連するQ&A

  • Pythonについて

    Pythonはスマホのメモ帳などでもできるの ですか? htmlやcssは、メモ帳(テキストファイル)を ファイルに保存して拡張子を.htmlにすれば 機能するのですが、Pythonではできるの でしょうか? また、変数など、どのようにしてPythonと htmlを連携?すれば良いのでしょうか?

  • Python:ifについて

    Python初心者です。 ある変数(a,b,c)で条件A(a<b+c and b<a+c and c<b+a)があるとする。 ・条件Aを満たさない場合:0 ・条件Aを満たしたうち、  条件Bを満たす:1  条件Cを満たす:2  条件Dを満たす:3 このように「Aがtrueの中で、別の条件を満たす場合~」とういうのはどのように書けばいいでしょうか。

  • pythonのメゾッドの整合性について

    こんばんは。 pythonを勉強し始めましたが理解できない部分があって質問させて頂きます。 プログラム、特にオブジェクト指向をまだよく理解していないのである程度初心者向けの回答をお願いします。 pythonにおいて文字列はオブジェクトであり、 >>> strA = "python" >>> print (strA) python >>> print (strA.upper()) PYTHON >>> print (strA) python のように使われるメゾッドが存在しています。 これはオブジェクト自体を変化させるのではなく、今回の場合ではオブジェクトがupper()されたオブジェクトを返しています(まちがっていませんよね?)。 そのため、strA自体を変化させるには >>> strA = strA.upper() >>> print (strA) PYTHON のようにする必要があると理解していました。 ここで新しいオブジェクトlistを用いた時 >>> tl = ['A','B','C','D','E','F'] >>> print (tl) ['A', 'B', 'C', 'D', 'E', 'F'] >>> print(tl.reverse()) None >>> print(tl) ['F', 'E', 'D', 'C', 'B', 'A'] >>> listA.reverse() となります。文字列から類推すると >>>tl = ['A','B','C','D','E','F'] >>>print (tl.reserve()) ['F', 'E', 'D', 'C', 'B', 'A'] >>>print(tl) ['A','B','C','D','E','F'] >>>tl =tl.reserve() >>>print (tl) ['F', 'E', 'D', 'C', 'B', 'A'] のような振る舞い方を行うのが"正しい"と思うのですがなぜ違うのでしょうか?

  • pythonについて

    私はプログラミングに興味があってmacでpython2.7を使っています。 python2.7でプログラムをファイルを書く方法が分かりません。 また、 python専用の本を持ってるのですが、「test.py」という部分があります。 “テキストエディット”、“AppleScript エディット”で保存するをクリックして 名前を「test、py」にできないのですが「test.py」にする必要はないのでしょうか? どなたかやり方を教えてください。

  • PythonでGTKの使いかた

    最近Pythonをはじめたのですが、GTKがうまくあつかえません。ググってもC言語での使いかたばかりで困っています。 今、特にGtkEntryのテキストを変数に代入する方法がわかりません。初歩的な質問でもうしわけないですが、教えていただけませんでしょうか? Gladeを使用しているので、それ用の回答ですとなおありがたいです。

  • centos6 python2.7 SCL

    centos6.10を使用 pythonのバージョンは2.6.6です python 2.7を一時的に利用しようと思って https://hondou.homedns.org/pukiwiki/index.php?Sakura%20CentOS6%20%A4%C7%20SCL%20%A4%F2%BB%C8%A4%C3%A4%C6%20Python2.7%20%A4%F2%BB%C8%A4%A6 こちらのサイトを参考にしたのですが ルートユーザーではpython2.6.6のまま変わらない状態で困っています。 一般ユーザーではpython2.7.13になる事ができました。 ルートで使用するにはどうしたらいいでしょうか? サーバーの再起動などはしてみましたが変化はありませんでした。

  • Pythonで属性とは?

    プログラミング初心者です、よろしくおねがいします 自分でも調べたのですが初心者すぎて用語が難しく解らないところが多くはっきりしないので教えてください。 Pythonでいうオブジェクト、メソッド、属性の違いはなんですか? 私の今の所の知識では オブジェクト=クラスやメソッドやクラス変数 メソッド=クラスの中に有る関数 属性=クラスの中にある関数や変数など じゃ、オブジェクトと属性の違いってなんなの?ということに 以下の例題でA objects are given a color attribute of "white"とあります attribute=属性ですよね? つまり属性とはインスタンス変数の中身のことなの? class A(object): ....def __init__(self): ........self.color = "white" word = A() print(word.color) 有識者の方々にはくだらなすぎる疑問かも知れませんがよろしくおねがいします

  • Pythonでの関数呼び出し

    現在pythonでのプログラミングをしています。 例えば下のように関数を作るとglobal errorが発生します。 pythonでは引数で関数名を受け取らずに関数内から他の関数を呼び出すことはできないのでしょうか? よろしくお願いします。 ***************************************** def a():   b() def b():   print "test" a() *****************************************

  • Cで出力したバイナリをPythonから読みたい

    C言語でバイナリファイルに出力した配列データを、Pythonで使えるように読み込みたいです。 具体的な状況は以下の通りです。 ①以下のCプログラムを実行してdata.binを作った ``` #include <stdio.h> #include <complex.h> int main(){ int N = 256; double complex a[N]; FILE *fp; for(int i=0; i<N; i++){ /* a[N]に値を代入 */ } fp = fopen("data.bin", "rb"); fwrite(a, sizeof(a), 1, fp); fclose(fp); return 0; } ``` ②Pythonからこのdata.binファイルにアクセスして複素数の配列を得たい、が良い方法がわからない という感じになります。 現状やりかたがわからないので、一旦Cでバイナリファイルをfreadで読み込んでからfprintf等で10進数表記のテキストデータとしてファイル出力して、それをPythonから普通に文字として読み込んでから数値に変換して処理しています。 一回中間ファイルが挟まるので処理が面倒です。Pythonから直接バイナリが読めれば便利かと思い質問させていただきました。

  • pythonで組合せ、順列

    pythonで、a=[4,5,6],b=[7,8],c=[9,10],x=a+b+cというリストがあり、 aの順列から1つ(a1)、bの順列から1つ(b1)、cの順列から1つ(c1)を選択し、 それらをxx=a1+b1+c1とするすべてのxxを求めるためにはどうすればいいですか? xxの例 [[6,4,5],[7,8],[10,9]]

専門家に質問してみよう