2015-01-06 3 views
0

Я читаю файл .txt, чтобы создать словарь, который я назвал irTable. Он содержит ключ, который я называю идентификатором (идентификатор устройства), а затем 3 значения, метка, частота, состояние.Запись по строкам в файл?

Теперь я читаю и добавляю словарь отлично, однако я не понимаю подходящего метода для повторной записи этих изменений в .txt-файл по строкам.

Мой текущий код:

def writeFile(): 
    f = open("test.txt","w") 
    for line in irTable: #irTable being the dictionary where my Key and 3 values are. 
     print(line, file="test.txt") 
     f.close() 

Выходы эта ошибка:

print(line, file="test.txt") 
AttributeError: 'str' object has no attribute 'write' 

Для справки, форматирование для моего текстового файла:

rm1d1,lamp,100001,False 
rm1d2,tv,100002,False 
rm2d1,lamp,100003,False 

Так как я могу написать мой «новый» словарь в этот файл?

+0

file.write (строка) напишет строку в файл для вас. Не закрывайте файл до завершения цикла for. Также стоит искать ключевое слово для открытия и закрытия файлов, так как это самый питонический способ делать вещи. – Scironic

+0

Если 'irTable' является словарем, то' строка' является всего лишь ключом. Вы хотите записать в файл как ключи, так и значения. –

ответ

4

file parameter из print ожидает открытого файла в качестве аргумента. Вы должны передать f вместо имени файла:

print(line, file=f) 

Это, или вы можете использовать write метод f:

f.write(line) 

Заметим, однако, что это не добавит новую строку, как print , Вам необходимо добавить ее вручную, если вы хотите один:

f.write(line + '\n') 

Кроме того, f.close() линия должна быть dedented один уровень. В противном случае вы закроете файл во время первой итерации цикла. Конечно, это, вероятно, будет лучше просто использовать with-statement:

def writeFile(): 
    with open("test.txt","w") as f: 
     for line in irTable: 
      print(line, file=f) 

Это автоматически закроет файл для вас, когда сделано.

+2

Возможно, было бы проще использовать 'file.write (line)'. – 9000

+0

Это тоже работает. Но оба метода делают то же самое, и параметр 'file'' print' был создан для выполнения таких задач, поэтому это действительно вопрос предпочтения. Я просто держал стиль OP. :) – iCodez

+0

Примечание. 'Print' добавляет новую строку, если вы не установите' print (line, end = '') ', а' f.write' - нет. –