2013-12-09 4 views
0

Это должно помещать эту информацию в новый файл, но я получаю сообщение об ошибке 'tuple' object has no object 'write', поэтому мне нужна помощь, чтобы выяснить, что не так в моем коде.Как это положить на файл и избавиться от кода ошибки

def codeData(filename): 
    file = open(filename) 
    outputFile = ("Project.txt", "w") 
    #makes file that will take information from given file and write on it 
    clinic = file.readline().strip() #takes the name of clinic and writes it 
    patientnumber = int(file.readline().strip()) #takes the amount of patients 

    for i in range(patientnumber):  
     outputFile.write("<patient>\n") 
     outputFile.write("<patientID>"+file.readline().strip()+"</patientID>\n") 
     outputFile.write("<clinic>"+clinic+"</clinic>\n") 
     age = int(file.readline().strip()) 
     outputFile.write("<age>"+str(age)+"</age>\n") 

     outputFile.write("<gender>"+gender+"</gender>\n")  
     height = int(file.readline().strip()) 

     outputFile.write("<height>"+str(height)+"</height>\n") 
     weight = int(file.readline().strip()) 

     outputFile.write("<weight>"+str(weight)+"</weight>\n") 
     hba1 = int(file.readline().strip()) 

     outputFile.write("<hba1>"+str(hba1)+"</hba1>\n") 
     cholesterol = int(file.readline().strip()) 

     outputFile.write("<cholesterol>"+str(cholesterol)+"</cholesterol>\n") 

     outputFile.write("<smoker>"+smoker+"</smoker>\n") 

     systolic = int(file.readline().strip()) 
     outputFile.write("<systolic>"+str(systolic)+"</systolic>\n") 

     diastolic = int(file.readline().strip()) 
     outputFile.write("<diastolic>"+str(diastolic)+"</diastolic>\n") 

     file.close() 
     outputFile.close() 

    codeData("Project Text.txt") 

Вот что на файл, который он принимает в

UHIC 
2 
A31415 
54 
M 
180 
90 
6.7 
100 
No 
130 
65 
A32545 
62 
F 
160 
80 
7.2 
120 
Yes 
180 
92 
+0

Хорошо, что этот вопрос заключается в том, что я получил его для запуска через один раз, и он работает через первую часть списка, но мне нужно, чтобы он прошел снова, и я не могу заставить его сделать это, чтобы кто-нибудь знал, как исправить это, пожалуйста, помогите? – user3084628

ответ

0

Ошибка о tuple не имея метод write происходит потому, что вы не когда-либо открыть выходной файл, вы просто ставить аргументы, которые будут переданы в open в скобках:

outputFile = ("Project.txt", "w") # need to call open here! 

Однако, вы действительно должны использовать with заявление, чтобы открыть и закрыть два файла:

with open(filename) as file, open("Project.txt", "w") as outputFile: 
    # the rest of your code, skipping the close calls 

Вы имели отдельную ошибку, где close вызовы были внутри цикла. Использование with делает ручное закрытие полностью ненужным, поэтому вам не нужно беспокоиться о том, где разместить вызовы.

Еще одно предложение, не связанное с текущей ошибкой: если вы читаете или записываете структурированный формат файла (например, XML), вероятно, вы должны использовать выделенный модуль для этого ввода или вывода. Гораздо проще изучить API, чем сделать свой собственный код, чтобы написать его, и у вас будет больше шансов, что он будет работать правильно. Например, это может быть сложно, когда вы пишете XML вручную, чтобы убедиться, что все ваши теги закрыты правильно. (Ваш код не появляется, чтобы закрыть свои <patient> тегов в любом месте, так что это может относиться к вам!)

Я думаю, что для XML конкретно, модулем ElementTree (xml.etree), вероятно, путь, если вы хотите что-то в стандартной библиотеки, но я никогда не использовал ее, поэтому я не могу говорить авторитетно. Также есть xml.dom.minidom плюс пакеты сторонних модулей. Другие люди, у которых больше опыта работы, могут предложить лучший совет по этим вариантам.

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