2015-11-21 3 views
1

Мой код не будет записывать в файл, что я делаю неправильно? пожалуйста помоги. Я пытаюсь запрограммировать, чтобы продолжать запрашивать продукты, пока пользователь не вводит код продукта. Я хочу, чтобы все файлы сохранялись в файле.python - запись в текстовый файл с использованием итерации

store_file = open("Database.txt", "w") 
    NewProduct = "" 
    while NewProduct != False: 
     contine = input("Press 1 to enter a new product press 2 to leave: ") 
     if contine == "1": 
      print("Enter your product information") 
      information = [] 
      product = input("What's the product code: ") 
      information.append(product) 
      description = input("Give a description of the product: ") 
      information.append(description) 
      price = input("Enter price of product: ") 
      information.append(price) 
      information = str(information) 
      clean = information.replace("]","").replace("[","").replace(",","").replace("'","") 

      store_file.write(clean) 

     elif contine == "2": 
     NewProduct = False 

     else: 
      print("Your input is invalid") 
    store_file.close 
+0

Это Python 2 или Python 3? Делает огромную разницу; на Py2, этот код гарантирует, что все входы недействительны. Однако мы должны знать фактическую ошибку (или ее отсутствие). – ShadowRanger

+0

Я использую python 3. ошибок не возникает, но проблема в том, что файл database.txt создан, но не содержит никаких данных. –

ответ

0

У меня есть программа, работающая со следующими настройками. См комментарии для объяснения:

store_file = open("Database.txt", "w") 
NewProduct = "" 
while NewProduct != False: 
    continue = raw_input("Press 1 to enter a new product press 2 to leave: ") 
    #Changed to raw_input because input was reading in an integer for 1 rather than a 
    #string like you have set up. This could be specific to my IDE 
    if continue == "1": 
     print("Enter your product information") 
     information = [] 
     product = raw_input("What's the product code: ") 
     information.append(product) 
     description = raw_input("Give a description of the product: ") 
     information.append(description) 
     price = raw_input("Enter price of product: ") 
     information.append(price) 
     information = str(information) 
     clean = information.replace("]","").replace("[","").replace(",","").replace("'","") 

     store_file.write(clean + "\n") 
     #Added a line break at the end of each file write 


    elif contine == "2": 
     NewProduct = False 

    else: 
     print("Your input is invalid") 
    store_file.close() #Added parentheses to call the close function 
+0

Спасибо за ваши ответы. Теперь я смог решить и улучшить свой код благодаря вашим ответам. Я использую python 3 и новичок в нем. –

0

Я предполагаю, что проблема здесь в том, что вы используете Python 2, и input не делать то, что вы думаете, что он делает. В Python 2, inputeval s вход как будто это был исходный код Python, поэтому, если кто-то войдет в 2, он вернет значение int2, а не "2". В Python 2 вы хотите использовать raw_input, всегда (eval - случайный пользовательский ввод не является безопасным/надежным).

Кроме того, в то время как на CPython (ссылка переводчик) файлы, как правило, естественным образом закрыть себя, когда они выходят из области видимости, вы сделали попытку close, но забыли на самом деле вызова метода close; store_file.close ищет метод, не называя его, store_file.close() фактически закроет его. Конечно, явно close - это, как правило, неправильный подход; вы должны использовать заявление with, чтобы избежать возможности забыть закрыть (или исключение, пропустив close). Вы можете заменить:

store_file = open("Database.txt", "w") 
... 
store_file.close() 

с:

with open("Database.txt", "w") as store_file: 
    ... do all your work that writes to the file indented within the with block ... 
... When you dedent from the with block, the file is guaranteed to be closed ... 

Есть и другие вопросы, хотя. Что вы делаете с:

information = str(information) 
information = information.replace("]","").replace("[","").replace(",","").replace("'","") 

ужасно. Я на 99% уверен, что вы действительно хотели просто присоединиться к входам с пробелами. Если вы включите все input вызовы raw_input (только на Python 2, на Python 3, input, как raw_input на Python 2), то ваш list список str, и вы можете просто join их вместе вместо того, чтобы пытаться stringify list, затем удалите все list -y бит. Вы можете заменить обе строки выше:

information = ' '.join(information) 
+0

Спасибо за ваши ответы. Теперь я смог решить и улучшить свой код благодаря вашим ответам. Я использую python 3 и новичок в нем. –

Смежные вопросы