Python文件练习题

时间:2012-05-14 01:52:09

标签: python python-3.x

我正在学习教科书中的教程,“从python第二版开始”,我在IDLE 3.2中进行了这个练习。我似乎无法弄清楚这个问题,它允许我输入销售数量然后只有1个销售额的回声“数据写入sales.txt”。然后显示第2天的提示,但输入的任何金额都会导致追溯:

第118行,主要是    sales_file.write(str(sales)+'\ n')    ValueError:关闭文件的I / O操作。

代码:

def main():

     num_days = int(input('For how many days do ' + \
                          'you have sales? '))

     sales_file = open('sales.txt', 'w')


     for count in range(1, num_days + 1):
         sales = float(input('Enter the sales for day #' + \
                             str(count) + ': '))
         sales_file.write(str(sales) + '\n')
         sales_file.close()
         print('Data written to sales.txt.')

main()

3 个答案:

答案 0 :(得分:7)

您正在关闭for循环中的文件。当您写入文件时,下次循环时,您正在尝试写入已关闭的文件,因此显示的错误消息为I/O operation on closed file.

移动线

sales_file.close()

到for循环底部的print语句之后,但在for的级别缩进。这将在循环之后仅关闭文件一次(而不是重复),即在程序结束时完成它。

像这样:

for count in range(1, num_days + 1):
   sales = float(input('Enter the sales for day #' + str(count) + ': '))
   sales_file.write(str(sales) + '\n')
   print('Data written to sales.txt.')

sales_file.close()   # close file once when done

更好的方法是使用with语句,因为它会在您完成后自动为您关闭文件。所以你可以说

with open('sales.txt', 'w') as sales_file:
   for count in range(1, num_days + 1)
      # rest of the code
      # but *no* close statement needed.

答案 1 :(得分:1)

如果你使用with open('sales_file','w'),你可以用更干净的方式做到这一点 这样,一旦你离开with区块,它将自动关闭。{1}}区块 文件。所以你要编辑你的函数来阅读:

def main():

    num_days = int(input('For how many days do ' + \
                        'you have sales? '))

    with open('sales.txt', 'w') as sales_file:
        for count in range(1, num_days + 1):
            sales = float(input('Enter the sales for day #' + \
                                str(count) + ': '))
            sales_file.write(str(sales) + '\n')
            print('Data written to sales.txt.')
    # once you leave the block (here) it automatically closes sales_file
main()

答案 2 :(得分:0)

您在1循环中关闭文件,然后在下一次迭代中写入该文件。靠近循环外面

def main():

     num_days = int(input('For how many days do ' + \
                          'you have sales? '))

     sales_file = open('sales.txt', 'w')


     for count in range(1, num_days + 1):
         sales = float(input('Enter the sales for day #' + \
                             str(count) + ': '))
         sales_file.write(str(sales) + '\n')
         print('Data written to sales.txt.')

     sales_file.close()

main()

更好的是,您可以使用with

def main():

     num_days = int(input('For how many days do you have sales? '))

     with open('sales.txt', 'w') as sales_file:

         for count in range(1, num_days + 1):
             sales = input('Enter the sales for day #%s: ' % count)
             sales_file.write('%s\n' % sales)
             print('Data written to sales.txt.')

main()