如何编写多次调用函数的输出文件?

时间:2016-06-17 20:17:45

标签: python function file-handling

我试图从连续调用的函数返回的值中写出一个输出文件,但是我无法做到,而是收到如下错误:

    MA.write(l)
TypeError: expected a character buffer object

我的剧本:

def do():
    print "Hello"
if __name__ == "__main__":
    do()
    MA=open("hi.txt","w")
    l=map(lambda x: do(), range(10))
    MA.write(l)

可能是它的基础,但有人可以给出建议真的很有帮助。

预期输出:

hi.txt

Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello

提前感谢你

2 个答案:

答案 0 :(得分:2)

我认为这是你的意图:

def do():
    return "Hello"

if __name__ == "__main__":
    with open("hi.txt", "w") as adele:
        hellos = map(lambda x: do(), range(10))
        for hello in hellos:
            adele.write(hello)
  • do()需要返回一个值以在map
  • 中累积
  • 您需要以某种方式迭代map结果

另一方面,使用map是过度杀伤......但也许在你的大背景下有意义。

for x in range(10):
    adele.write(do())

答案 1 :(得分:1)

尝试这样的事情:

def do():
    return "Hello"

if __name__ == "__main__":
    MA=open("hi.txt","w") # Prepare hi.txt
    l=map(lambda x: do(), range(10)) # Adds Hello to the list 10 times
    MA.write('\n'.join(l)) # Combines them together with a newline between each entry
    MA.close() # Finished with hi.txt, this line is important

您需要返回,而不是打印输出以将其添加到列表中,然后将每个列表条目连接到一个要写入的字符串中。

我对您的版本所做的更改:

  • 我返回“你好”而不是打印
  • 我不会立即运行do(),因为你不需要。
  • 我在编写元素之前将它们组合起来
  • 我完成后关闭文件