将表保存为文本

时间:2011-07-06 17:57:16

标签: python

我现在拥有的:

oname = open("1231.txt","w")

def cC_():

          d_="   fahrenheit        celsius"
          print(d_)
          for i in range(-300,213,1):
                  c_=(i-32)*(5/9)
                  a_=str(i)+'°F'
                  b_=str(round(c_,3))+'°C'
                  print("%10s" % (a_), '        ',"%10s" % (b_))

oname.write(cC_())

oname.close()

我的问题:我无法获得一个像文本中的函数一样的表格。

fahrenheit celsius

-300°F          -184.444°C
-299°F          -183.889°C
-298°F          -183.333°C
-297°F          -182.778°C
-296°F          -182.222°C
-295°F          -181.667°C
-294°F          -181.111°C
-293°F          -180.556°C
-292°F            -180.0°C

.........

4 个答案:

答案 0 :(得分:2)

def cC_(fout=sys.stdout):
   ...
  print(..., file=fout)
   ...

with open(..., 'w') as oname:
  cC_(oname)

答案 1 :(得分:0)

您正在编写函数返回值,而不是函数中打印的字符串。

您应该将打印调用更改为oname.write。

with open("1231.txt","w") as oname:
    oname.write("   fahrenheit        celsius\n")
    for i in range(-300,213,1):
        c_=(i-32)*(5/9)
        a_=str(i)+'°F'
        b_=str(round(c_,3))+'°C'
        oname.write("".join(("%10s" % (a_), '        ',"%10s\n" % (b_))))

编辑:

使用.format代替str转换有一种更好的方法(您也可以使用旧的%表示法执行此操作。):

with open("1231.txt","w") as oname:
    oname.write(" fahrenheit       celsius\n")
    for i in range(-300,213,1):
        c=(i-32)*(5/9)
        oname.write("{0:<10.3f}°F    {1:<10.3f}°C \n".format(i, c))

答案 2 :(得分:0)

Ignacio的答案适用于python3,对于python2,你应该......

def cC_(fout=sys.stdout):
    ...
    print >> fout, ...

with open(..., 'w') as oname:
    cC_(oname)

答案 3 :(得分:0)

我建议:

oname = open("1231.txt","w")

def cC_():
    return ("%13s%18s\n" % ('fahrenheit','celsius') \
            + '\n'.join("%10s °F %14s °C" % ( i, '%.3f' % ((i-32)*5./9) )
                        for i in xrange(-300,213,1) ) )

print cC_()
oname.write(cC_())

oname.close()

它是用古老的字符串格式化工具编写的。 当然可以更改此代码以使用format()内置函数。

   fahrenheit           celsius
      -300 °F       -184.444 °C
      -299 °F       -183.889 °C
      -298 °F       -183.333 °C
      -297 °F       -182.778 °C
      -296 °F       -182.222 °C
      -295 °F       -181.667 °C
      -294 °F       -181.111 °C
      -293 °F       -180.556 °C
      ...........
      -149 °F       -100.556 °C
      -148 °F       -100.000 °C
      -147 °F        -99.444 °C
      -146 °F        -98.889 °C
      -145 °F        -98.333 °C
      -144 °F        -97.778 °C
      ...........
        12 °F        -11.111 °C
        13 °F        -10.556 °C
        14 °F        -10.000 °C
        15 °F         -9.444 °C
        16 °F         -8.889 °C
        17 °F         -8.333 °C
        18 °F         -7.778 °C
        19 °F         -7.222 °C
        20 °F         -6.667 °C
        21 °F         -6.111 °C
        22 °F         -5.556 °C
        23 °F         -5.000 °C
        24 °F         -4.444 °C
        25 °F         -3.889 °C
        26 °F         -3.333 °C
        27 °F         -2.778 °C
        28 °F         -2.222 °C
        29 °F         -1.667 °C
        30 °F         -1.111 °C
        31 °F         -0.556 °C
        32 °F          0.000 °C
        33 °F          0.556 °C
        34 °F          1.111 °C
        35 °F          1.667 °C
        36 °F          2.222 °C
        37 °F          2.778 °C
        38 °F          3.333 °C
        39 °F          3.889 °C
        40 °F          4.444 °C
        41 °F          5.000 °C
        42 °F          5.556 °C
        43 °F          6.111 °C
        44 °F          6.667 °C
        45 °F          7.222 °C
        46 °F          7.778 °C
        47 °F          8.333 °C
        48 °F          8.889 °C
        49 °F          9.444 °C
        50 °F         10.000 °C
        51 °F         10.556 °C
        52 °F         11.111 °C
        53 °F         11.667 °C
        ...........
        .......