提问者:小点点

Python-将循环创建的变量写入输出文件


我有一个函数,它接受我输入的嵌套列表,并以我所追求的格式将其写入控制台。

def print_table(table):
    longest_cols = [(max(
        [len(str(row[i])) for row in table]) + 2) 
        for i in range(len(table[0]))]
    row_format = "".join(["{:>" + str(longest_col) + "}" 
        for longest_col in longest_cols])
    for row in table:
        print(row_format.format(*row))

如何修改函数,使其将输出写入输出文件?

我试图通过说

x = print_table(table)

然后

f.write(x)
f.close()

但所有这些都没有写入输出文件

非常感谢您在这方面的任何帮助。非常感谢。


共2个答案

匿名用户

定义并调用函数时,必须使用return将其分配给某个对象
但如果其行\格式。格式(*行)要存储,请在函数中打开它:

def print_table(table,f):
    longest_cols = [ (max([len(str(row[i])) for row in table]) + 2) for i in range(len(table[0]))]
    row_format = "".join(["{:>" + str(longest_col) + "}" for longest_col in longest_cols])
    for row in table:
        f.write(row_format.format(*row))
    f.close()

现在就叫它:

print_table(table,f)

比方说,您希望逐行添加它,然后使用:

for row in table:
    f.seek(0)
    f.write("\n") #not possible if file opened as byte
    f.write(row_format.format(*row))

现在,如果您想按自己的方式进行,请尝试:

def print_table(table):
    longest_cols = [(max(
        [len(str(row[i])) for row in table]) + 2) 
        for i in range(len(table[0]))]
    row_format = "".join(["{:>" + str(longest_col) + "}" 
        for longest_col in longest_cols])
    return '\n'.join(row_format.format(*row) for row in table)

现在称之为:

x = print_table(table)
f.write(x)
f.close()

匿名用户

有很多方法可以解决这个问题,这取决于您希望您的函数承担什么责任。您可以让函数格式化表格,但将输出留给调用方(如果调用方希望格式化的表格去不同的地方,这可能更普遍有用)

def print_table(table):
    longest_cols = [(max(
        [len(str(row[i])) for row in table]) + 2) 
        for i in range(len(table[0]))]
    for longest_col in longest_cols:
        yield "".join(["{:>" + str(longest_col) + "}" 

with open("foo.txt", "w") as f:
    f.writelines(row + "\n" for row in print_table(table))

或者您可以将输出责任赋予函数并将其传递给您想要的输出流

import sys

def print_table(table, file=sys.stdout):
    longest_cols = [(max(
        [len(str(row[i])) for row in table]) + 2) 
        for i in range(len(table[0]))]
    row_format = "".join(["{:>" + str(longest_col) + "}" 
        for longest_col in longest_cols])
    for row in table:
        print(row_format.format(*row), file=file)

with open("foo.txt", "w") as f:
    print_table(table, f)

相关问题