【问题标题】:How to write an output file of multiple time called functions?如何编写多次调用函数的输出文件?
【发布时间】:2016-06-17 20:17:44
【问题描述】:

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

    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

提前谢谢你

【问题讨论】:

  • map 在这里没有意义,您希望文件最后包含什么?
  • 您可以使用MA.writerows() 将字符串列表写入文件,但由于do 不返回任何内容,它仍然会引发错误。
  • 你好你好你好你好你好你好你好你好你好你好

标签: python function file-handling


【解决方案1】:

我认为这是你的意图:

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())

【讨论】:

  • 谢谢,你所说的矫枉过正是什么意思?你的意思是为大背景选择地图是个坏主意吗?
  • 在这种情况下是双重抽象。您已经创建了一个在范围内循环的列表..然后您遍历该列表。你已经循环了两次。你可以只循环一次。 @user3805057
【解决方案2】:

试试这样的:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2014-04-17
    • 2020-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-28
    • 1970-01-01
    相关资源
    最近更新 更多