【问题标题】:Double-entry table and export to csv复式表并导出为 csv
【发布时间】:2015-11-30 07:08:11
【问题描述】:

我在使用这张表时遇到了一些问题:

import csv

with open('chill.csv','wb') as f:
    writer = csv.writer(f)
for s in range(0,70,5):
    for t in range(-25,10,5):
        print 13.127 + 0.6215*t-11.362*s**0.16+0.396*t*s**0.16, '\t',
    print
writer.writerow([13.127 + 0.6215*t-11.362*s**0.16+0.396*t*s**0.16])

问题是行和列的输入(st)被直接采用并详细说明到 print 语句中,但我需要在行和列中显示这些值的来源结果得出。此外,我尝试使用常用命令将表导出到 .csv 文件,但 Python 给了我一个运行时错误: ValueError: I/O operation on closed file。我该如何解决这两个问题?

顺便说一句,我正在使用 Python 2.7。

【问题讨论】:

    标签: python csv


    【解决方案1】:

    您的代码需要在 inside with 块中:

    with open('chill.csv','wb') as f:
        writer = csv.writer(f)
        for s in range(0,70,5):
            for t in range(-25,10,5):
                print 13.127 + 0.6215*t-11.362*s**0.16+0.396*t*s**0.16, '\t',
            print
        writer.writerow([13.127 + 0.6215*t-11.362*s**0.16+0.396*t*s**0.16])
    

    一旦您离开 with 语句的主体,文件就会关闭,因此 writer.writerow 将失败并出现您看到的错误。

    如果您想要一行中的所有数据并打印:

    with open('chill.csv', 'wb') as f:
        import csv
        wr = csv.writer(f)
        data = ([str(13.127 + 0.6215 * t - 11.362 * s ** 0.16 + 0.396 * t * s ** 0.16)
                     for t in range(-25, 10, 5)]
                         for s in range(0, 70, 5))
        for row in data:
            print("\t".join(row))
            wr.writerow(row)
    

    【讨论】:

    • 谢谢,它有效!但是如何在 shell 和 CSV 中同时显示行和列的初始值?
    • 如果您想同时打印到屏幕并写入 csv,只需在有打印的地方添加一个 writerow 或者您正在谈论文件中的内容?
    • 我已经检查了文件...使用上面的代码只将最后一个计算值存储在第一个单元格中,所以我将writer.writerow 放在for 循环中,但是现在在单列中打印整个表格...
    • 是的,因为我根据您自己的代码将 writerow 留在了循环之外,如果您希望它每次都写在循环内缩进它。 writerow 每次都添加一个新行,如果您每次只写入一个值,您希望看到什么?你只想要一行吗?
    • 但是我怎样才能以一种看起来像 shell 中的输出的方式导出表?
    猜你喜欢
    • 2020-09-05
    • 1970-01-01
    • 1970-01-01
    • 2020-12-05
    • 2021-07-29
    • 1970-01-01
    • 2018-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多