2016-09-22 81 views
0

我打开文件,但是说文件没有打开。我坚持要做什么。我是python的新手。我不断收到这个错误,我不知道它是否修复它

以下是错误:

Traceback (most recent call last): 
File "\\users2\121721$\Computer Science\Progamming\task3.py", line 43, in <module> 
file.write(barcode + ":" + item + ":" + price + ":" +str(int((StockLevel- float(HowMany))))) 
    ValueError: I/O operation on closed file. 

这里是代码:

#open a file in read mode 
file = open("data.txt","r") 
#read each line of data to a vairble 
FileData = file.readlines() 
#close the file 
file.close() 

total = 0 #create the vairble total 
AnotherItem = "y" # create 
while AnotherItem == "y" or AnotherItem == "Y" or AnotherItem == "yes" or AnotherItem == "Yes" or AnotherItem == "YES": 
     print("please enter the barcode") 
     UsersItem=input() 
     for line in FileData: 
       #split the line in to first and second section 
       barcode = line.split(":")[0] 
       item = line.split(":")[1] 
       price = line.split(":")[2] 
       stock = line.split(":")[3] 

       if barcode==UsersItem: 
        file = open("data.txt","r") 
        #read each line of data to a vairble 
        FileData = file.readlines() 
        #close the file 
        file.close() 
        print(item +"  £" + str(float(price)/100) + "  Stock: " + str(stock)) 
        print("how many do you want to buy") 
        HowMany= input() 
        total+=float(price) * float(HowMany) 
        for line in FileData: 
         #split the line in to first and second section 
         barcode = line.split(":")[0] 
         item = line.split(":")[1] 
         price = line.split(":")[2] 
         stock = line.split(":")[3] 
         if barcode!=UsersItem: 
          open("data.txt","w") 
          file.write(barcode + ":" + item + ":" + price + ":" +stock) 
          file.close() 
         else: 
          StockLevel=int(stock) 
          open("data.txt","w") 
          file.write(barcode + ":" + item + ":" + price + ":" +str(int((StockLevel-float(HowMany))))) 
          file.close() 
        open("data.txt","w") 
        StockLevel=int(stock) 
        print("Do you want to buy another item? [Yes/No]") 
        AnotherItem = input() 
     if AnotherItem == "n" or "N" or "no" or "No" or "NO": 
       print("total price: £"+ str(total/100)) 
+0

如果没有'file = open(filename,mode)'any,那么你没有'file'对象创建了如何做'file.write'。 –

回答

3

if barcode!=UsersItem: 
    open("data.txt","w") 

您需要

if barcode!=UsersItem: 
    file = open("data.txt","w") 

还有你在else声明中的错误。

而且你还应该考虑重构你的代码,因为你有很多的文件打开和关闭。

编辑:如@roganjosh提到file是在Python 2一个内置的名字,所以你最好改变file所有出现如f

+0

我不会建议他们使用'file'内建名作为名字... – roganjosh

+0

@roganjosh'('file'in dir(__ builtin__))是False' –

+0

嗯,有趣。它是[Python 2](https://docs.python.org/2/library/functions.html#file)的内建,但不是[Python 3](https://docs.python.org/3/library /functions.html)。 – roganjosh

相关问题