类似于打印的函数,用于将字符串写入文本文件

时间:2012-11-07 17:30:39

标签: python function arguments

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

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

我正在寻找替代

的东西
print "Test"

MyLog "Test"

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

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

对于一个简单的字符串工作正常,但我认为它不会占用%参数,也不会像 logger“TEST”那样调用

3 个答案:

答案 0 :(得分:5)

你可以使用" print chevron"声明做你想做的事情:

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

请参阅documentation了解print语句。

当然,使用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中。

答案 1 :(得分:4)

print() 已经允许您这样做:

print(somestring, file=someopenfile)

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

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

__builtins__

答案 2 :(得分:1)

由于默认print输出到sys.stdout,您可以创建contextmanager,如我answer中所述,这将允许您使用常规{{1}无论您使用的是语句还是函数版本。