【问题标题】:print-like function that writes string to a text file将字符串写入文本文件的类似打印的函数
【发布时间】:2012-11-07 17:30:39
【问题描述】:

我想在 Python 中编写一个函数,该函数将像 print 那样接受参数,但我不想将字符串打印到标准输出,而是将格式化的字符串写入文本文件。

我想知道如何为这样的函数参数定义参数以接受字符串格式?

我正在寻找可以替代的东西

print "Test"

MyLog "Test"

但也应该支持 % 参数。 到目前为止,我只想到了这个:

def logger(txt):    
fh = open (LOGFILE, "a") #Get handle in append mode
fh.write(txt)
fh.close()
print txt
return True 

它适用于简单的字符串,但我认为它不会接受 % 参数,也不能像 logger "TEST"

那样调用它

【问题讨论】:

  • 每次都是同一个文件?
  • 您的意思是要编写一个可以像my_function arg1 arg2 这样调用的函数,还是只需要一种使用内置函数写入文件的方法?
  • 好吧,我可以例如调用 print "Test" 我希望能够用 MyLog "Test" 替换 print 例如
  • print 是 Python2.x 中的语句,不能在语言中添加其他语句。但是,您可以将 print 的特定语法用作语句以使其写入文件(例如 print >> log_file_object, "Test"
  • "string with %s formats %d" % ('3', 3)" 将始终计算为字符串,即使作为函数的参数也是如此。你试过什么?

标签: python function arguments


【解决方案1】:

你可以使用“print chevron”语句来做你想做的事情:

with open('filename.txt', 'w') as f:
  print >> f, my_object

有关打印语句,请参阅documentation

当然,最好将print() 函数用作Martijn Pieters suggests

更新

如果我将您的 logger 函数更改为使用 print chevron 语法,我会得到:

def logger(txt):    
  fh = open (LOGFILE, "a") #Get handle in append mode
  fh.write(txt)
  fh.close()
  print >>fh, txt
  return True 

如果你像这样调用这个函数:

now, duration = 4.0, 2.0
logger("User request at %f time took %f seconds." % (now, duration))

您的日志文件中会有一行如下所示:

User request at 4.0 time took 2.0 seconds.

所以你可以将它与% 格式一起使用(虽然你真的应该看看new-style formatting),但你不能这样称呼它:

logger "User request at %f time took %f seconds." % (now, duration)

这是因为 print 是一个 simple statement,它是一种语言级别的构造,您不能将它们添加到 Python。

【讨论】:

  • 很好,只是 print 是一个语句,而不是一个函数。
  • 是的——但似乎 OP 正在寻找一个语句,而不是他想要调用它的方式的函数。
  • @cerr 我已经更新了我的答案——我不认为你可以让 Python 完全按照你的意愿去做,但我已经添加了你如何接近,以及为什么你可以'不要靠近。
【解决方案2】:

print()已经让你这样做:

print(somestring, file=someopenfile)

如果您使用的是 python 2,请使用 from __future__ import print_function 获得相同的功能。

您始终可以使用与 print 函数相同的参数来实现函数并将其用作替换,或使用通配符参数(*args**kw),然后根据需要添加 file 关键字参数.您始终可以通过 __builtins__ 结构访问 original 内置 print() 函数:

def print(*args, **kw):
    if 'file' not in kw:
        # print to a file instead of stdout
        kw['file'] = someopenfile
    return __builtins__.print(*args, **kw)

【讨论】:

    【解决方案3】:

    由于默认情况下print 输出到sys.stdout,您可以按照我的answer 中的描述创建一个contextmanager,这将允许您使用常规print,无论您是否使用语句或函数版本。

    【讨论】:

      猜你喜欢
      • 2011-07-10
      • 2012-05-09
      • 1970-01-01
      • 1970-01-01
      • 2021-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多