• 締切済み

pythonのprint文のようなfprint文?

pythonのprint文(format有無とも)の通りにファイル書き込みをする文はありませんか。c言語のprintf文とfprintf文のような関係です(ファイルポインタだけが付く)。目的は既存のpythonのソースのprint文をすべてファイルに書き込みたいのです。write文で行うのは変更が大変ですのでうまいものがないかと。 ちょっと検索した範囲では見つからなかったので望み薄ですが。

  • Python
  • 回答数1
  • ありがとう数1

みんなの回答

  • wormhole
  • ベストアンサー率28% (1619/5653)
回答No.1

文字列(str)型のformatメソッドと printのfileキーワードで対応できませんか? https://camp.trainocate.co.jp/magazine/python-print/ https://techacademy.jp/magazine/21157

qhtsige
質問者

お礼

ご返事ありがとうございます。 formatメソッドはprintfに似た文字列を出力する(それをwrite文で出力)のですが、 formatメソッドでない場合はその変換が必要になり、このような形式に既存ソース(参考書サンプルなどの)print文を書き換えることが面倒と感じたのです。 理想的には、print出力をそのままログに出せるような、例えばlog.print(.....)などと書けるような都合の良いクラスがあればと夢想しました。 print文をコピーして直後に置きlog.を先頭につけるとか・・・。もっと都合よくはすべてのprint文に対して適用されるとか。

関連するQ&A

  • pythonで、if文の内容がなぜか無視されます。

    下記のコードはファイルの内容を手動で修正するためのコードです。 間違えて入力せずにボタンを押してしまった時のために、入力文の長さが一定以下の時に書き込みを自動停止するようプログラムしたいのですが、実行した際になぜかif文の内容が無視され、うまくいきません。 これは仕様ですか? pythonのコードは上から下に向けて実行されるんじゃないんですか? def manual_set(): frw_w = open("weight.txt", "w+") w = frw_w.read() print(w) w_next = input("set the w") if len(w_next) <10: #誤作動防止 print(len(w_next),"Alart") frw_w.close() else: print(len(w_next)) frw_w.write(w_next) frw_w.close()

  • pythonスクリプト実行不可

    pythonスクリプトをCGIとして動作させるとエラーになります。 環境は、 OS : CentOS 6.4 Python : 2.6.6 pythonソースは、 #!/usr/bin/python # coding: utf-8 print "Content-type: text/html; charset=UTF-8" print print ブラウザーから、このCGIを直接起動すると、/var/log/httpd/error_logに下記のエラーが出ます。 [Fri Oct 18 12:45:28 2013] [error] [client 10.1.34.89] (8)Exec format error: exec of '/home/httpd/cgi-bin/test.py' failed Exec format errorとは、何でしょうか? perl CGIは、正常に動作しているのですが。 アドバイスよろしくお願いします。

  • python超初心者です(3時間目)。pythonで以下のようなランダ

    python超初心者です(3時間目)。pythonで以下のようなランダム数列を生成させるにはどうしたらいいのでしょうか? 最終結果のイメージ(16進数8桁の数列x20行): 0 : c39a29eb 1 : b26cc9bb 2 : 4c494e47 ... 19: 93c85836 以下のようにコードを組んでみたのですが、 > tmp = ws.join(list) > TypeError: sequence item 0: expected string, int found のようなエラーが出てしまいます。どうやら数字を連結しようとしてるのでダメなのかな?と思っています。 ======================================== #! /usr/bin/python import random list = [] ws = "" for i in range (20): print i, ":", for j in range(8): list.append(random.randint(0,15)) tmp = ws.join(list) print tmp list = [] tmp = "" ======================================== ※ printでは必ずスペースが入ってしまうので、それを嫌う場合配列に入れて、要素を連結させなくてはならない、とwebにあったので、その方向で試してみました。 ※ また、ここではあくまでrandom を使用し、一文字(0,1,2,...E,F)づつ出力させたいと思っています。 なお、perlでは以下のように書くことができたのですが... ======================================== #! /usr/bin/perl for($i=0; $i<20; $i++){ printf ("%-02s: ", $i); for($j=0; $j<8; $j++){ printf("%x", int(rand(15)) ); } print "\n"; } ======================================== ※ んー第二言語としてpythonを学習してみていますが道のり険しそうです(やっぱrubyにしようか)... 宜しくお願い致します。

  • pythonファイルの文字化け

    MAMPを通じて以下のpythonファイルをchromeで表示したのですが、日本語の部分が文字化けしてしまいます。 #!C:/MAMP/bin/python/bin/python #coding:utf-8 print "content-type: text/html" print "" print "こんにちは" 全面的に参考にしたudemyのサイトで解決法を質問したのですが、 「Chromeの言語判定が空振りしているようなので、 <html lang="ja"> とhtmlタグのlang属性を追加して再読み込みしてみてください。」 と言われました。 しかし、pyファイルのどこにこのhtmlタグを入れるのか理解できません。 chromeのデベロッパーツールでこのタグを追加しても変わりませんでした(そもそも根本的解決になっていません)。 どのようにして解決すれば良いのでしょうか。

  • pythonの初歩的なことですが…エラーが出ています

    n = 0 while n < 10: print 'hello, world' n += 1 このソースを「test.py」というファイルに書き込み、pythonのGUI、「IDLE」でRun->Check Moduleでやってみると、invaild syntaxとなって実行できません。 'hello, world'の後ろの「'」が、エラーの原因らしいのですが、解決方法がわかりません。 グーグルで調べてもよくわかりませんでした。 pythonのIDLEのVerは3,1,1。 OSはWindows Vistaです。

  • Pythonを用いてCGIを作る勉強をしています。

    Pythonを用いてCGIを作る勉強をしています。 さて、CGIHTTPServerでCGIのテストをしようとしたところ、ぜんぜん動いてくれません。ちゃんとファイルのパーミッションも755にしました。 自分の力だけではどうにもならなかったため、ここで質問させてもらいます。 どうしたらよいのでしょうか。 僕がつくったPythonのソース test.pyは #! /usr/bin python print "Content-type: text/html\n" print "<html><body>Hello!</body></html>" です。 本来ならブラウザで「http://127.0.0.1:8000/cgi-bin/test.py」 とすれば動いてくれるはずなのに以下のようなエラーメッセージが出ます。 localhost - - [19/May/2010 23:46:43] "GET /cgi-bin/test3.py HTTP/1.1" 200 - Traceback (most recent call last): File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/CGIHTTPServer.py", line 255, in run_cgi OSError: [Errno 13] Permission denied localhost - - [19/May/2010 23:46:43] CGI script exit status 0x7f00 PCの環境はMacOSX10.6です。 だれか分かる方。教えていただけないでしょうか?? よろしくお願いします。

    • 締切済み
    • CGI
  • 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でのmmapの使い方

    よろしくお願いします。 現在、SH3LSR7706マイコンのLEDを点滅させるプログラムをPythonで実装しています。 そこで、 http://mes.sourceforge.jp/mes2/index-j.html こちらにあるプログラムを参考にさせていただいてるのですが C言語で以下のように書いてある部分をPythonで書くにはどうすればよいでしょうか? <<< code mmaped = (volatile unsigned char*)mmap(0, PAGE_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0xa4000000); >>> Pythonのドキュメントよると http://www.python.jp/doc/2.4/lib/module-mmap.html mmapメソッドにoffsetの引数を渡すところがないので、↑プログラムの「0xa4000000」の部分をどうすればよいのか教えてください。 今は、↓のように書いてますがこれだとオフセットの指定がないので意図した意図したアドレスにアクセスできません。(Pythonのバージョンは2.5です) <<< code mmap.mmap(fd.fileno(), mmap.PAGESIZE, mmap.MAP_SHARED, mmap.PROT_READ | mmap.PROT_WRITE) >>> よろしくお願いします。 参考にさせて頂いているプログラム <<< code #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <stdlib.h> #include <stdio.h> #include <string.h> #include <sys/mman.h> #include <asm/page.h> #define SCPDR 0x136 #define LED 0x10 int main() { volatile unsigned char *mmaped, scpdr; int fd, i; fd = open("/dev/mem",O_RDWR); if(fd < 0) { fprintf(stderr,"cannot open /dev/mem\n"); return 1; } mmaped = (volatile unsigned char*)mmap(0, PAGE_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0xa4000000); close(fd); if(mmaped == MAP_FAILED) { fprintf(stderr,"cannot mmap\n"); return 1; } for(i = 0;i < 3;i++) { mmaped[SCPDR] |= LED; sleep(1); mmaped[SCPDR] &= ~LED; sleep(1); } munmap((char*)mmaped, PAGE_SIZE); return 0; } >>>

  • Python で、既存のテキストにデータを書き加えたいと思っています。

    Python で、既存のテキストにデータを書き加えたいと思っています。 こんにちは、 私はプログラミング初心者であります。仕事で必要に迫られたこともあり、知人より簡単だから、とPythonを薦められ、学習を始めています。 質問は、既存のテキストファイルの文頭に、数字と文字を付け加えたいと思っているのですが、上手く行きません。 既存のテキスト(data.txt)はこんな感じで、保存されています。 1111.1111   2222.2222   3333.3333   4444.4444   5555.5555 5555.5555   6666.6666   7777.7777   8888.8888   9999.9999 1010.1010   1110.1111   1210.1212   1310.1313   1414.1414 実際には縦横に永遠とデータが羅列されています。空白部分はタブ区切りになっています。横に7000ほどのデータを読むと、改行されています。これがテキスト方式で保存されています。 このデータ群の先頭に6行文のデータを追加したいと試みています。以下のような感じのデータです。 ncols      1019 nrows      1923 xllcorner    -67.2327777773961 yllcorner    44.63742951396 cellsize    0.000277777777779674 NODATA_VALUE   -999 open関数で data.txt を開き、write を使ってしまうと、data.txt 内のデータが全て消えてしまうのですが、どのようにすれば上記にある6つのデータを書き加える事ができるのでしょうか? 大本のデータは縦横に 9000x7000 近くのデータがタブで区切られて保存されており、その大きさが 500MB を越えていて、職場のPCではノートパッドで開いてから書き足す事ができません。 どなたかアドバイスを頂ければ幸いであります。

  • pythonのシンタックスエラー

    python3のサンプルコードがあり、エラーが出ます。 内容はファイルを開いてちょっと変更して中身をプリントするというものです。 これは私が書いたのではなく、本の付録のサンプルなのですが、文法エラーとなります。何が原因かご指摘を頂ければと思いますが。文字コードの問題かなと思いましたが、UTF_8となっています。ファイルをdata.pyとして保存して、コマンドでpython data.pyを叩いたときに出てきます。(すみません、ここに張り付けた段階でインデントが見えなくなっているようですが、それは実際は問題ないです) file = "data.dat" limit = 2.0 with open(file, "r", encoding="utf_8") as fileobj: for i, line in enumerate(fileobj): if line == "\n": continue datalist = line.split(",") result = [int(float(num)<=limit) for num in datalist] print(f"{i}:{result}") #エラーメッセージ # File "data.py", line 9 # print(f"{i}:{result}") ^ #SyntaxError: invalid syntax これに関連する質問ですが、pythonはコンパイルしないようになっているみたいなので、コンパイル時のエラーと実行時のエラーの区別がつきません。このエラーは実際に動作してエラーが出ているということなのでしょうか。他の言語ではシンタックスエラーはコンパイルエラーなので実行前のエラーとは思いますが、文法チェックと実行の関係を教えて頂ければと思いますが。 よろしくお願いします。

専門家に質問してみよう