2016-09-22 3 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', как вы можете сделать' file.write', если нет 'file = open (filename, mode)' any where near. –

ответ

3

Существует

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

Вы должны

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

Аналогичная ошибка у вас есть в инструкции else.

И вы также должны рассмотреть возможность реорганизации своего кода, потому что у вас много открытий и закрытий файлов.

Edit: в @roganjosh упоминался file является встроенным именем в Python 2, так что лучше изменить все вхождения file до, например, f.

+0

Я бы не рекомендовал, чтобы они использовали 'file' builtin как имя ... – roganjosh

+0

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

+0

Хмм, интересно. Он является встроенным для [Python 2] (https://docs.python.org/2/library/functions.html#file), но не [Python 3] (https://docs.python.org/3/library /functions.html). – roganjosh