2012-05-29 4 views
2

Я пытаюсь добавить каждую строку файла с «(2 пробела/вкладки после») и добавить с помощью строки «\ r \ n» + ». Строки файла перед этой операцией выглядят . вроде как folllows string append in python

 <!--You have a CHOICE of the next 5 items at this level--> 
     <!--Optional:--> 
     <urn:Account id=\"?\"> 
      <!--Optional:--> 
      ............ 
      .............  

Я использую следующий код,

inf=open("req.txt","r") 

outf=open("out.txt","w") 

for line in inf.readlines(): 

    outf.write("\"   "+line+"\\r\\n\" +") 

inf.close() 

outf.close() 

добавляя слева происходит, как ожидалось, но Добавление данных не происходит должным образом Окончательный результат все линии были предваряться -. \ г \ n "+", кроме первой строки. Первая строка была добавлена ​​только ".

Я хочу, чтобы каждая строка предваряется «и с добавлением„\ г \ п“+»

+1

Просто комментарий: readlines() весьма неэффективен для больших файлов - просто перебрать сам файл объект вместо этого. – jnnnnn

+0

как сделать это, просьба указать образец кода. – user1423015

ответ

1

Вы, вероятно, следует использовать питон встроенный в строке форматирования.

outf.write("%s%s%s" % ('"   ', line, '\r\n" +')) 

Однако! Вы не удаляете новые строки из своих данных перед их заменой. В результате вы получаете свой формат, всю строку (включая новую строку), а затем вторую часть.

Вы хотите запустить его через python, встроенный в метод rstrip.

outf.write("%s%s%s" % ('"   ', line.rstrip(), '\r\n" +')) 

Одна вещь, которую вы хотите, чтобы следить за то, что rstrip удалит все белое пространство, если вы хотите удалить только Newlines, то вы можете использовать:

outf.write("%s%s%s" % ('"   ', line.rstrip("\r\n"), '\r\n" +')) 

Однако, как только вы сделаете это, вам нужно будет снова добавить новую строку в конец строки.

outf.write("%s%s%s%s" % ('"   ', line.rstrip("\r\n"), '\r\n" +', "\r\n")) 

Однако! В зависимости от вашей операционной системы по умолчанию вашей линия окончание может быть различным, чтобы сделать это правильно, вы будете хотеть import os тогда:

outf.write("%s%s%s%s" % ('"   ', line.rstrip(os.linesep), '\r\n" +', os.linesep)) 
+0

Просто из любопытства, почему не все '\ r \ n' заменены на os.linesep? – lfxgroove

+0

Вы действительно можете сделать это для параметра 'rstrip', но третий аргумент строки - это буквальный' \ r \ n' не возврат каретки и фид строки. В случае с rstrip это не имеет особого значения, потому что окончание строки будет либо '\ r', либо' \ n', либо '\ r \ n' в зависимости от вашей ОС, но я изменил его на последовательный , :) – OmnipotentEntity

+0

Информация, предоставленная OmnipotentEntity, полезна для меня, но данный код не работает для меня. но код ниже работал для меня. – user1423015

1

Есть ли причина, что вы не используете модуль XML для чтения/записи в файл XML? Потому что это может упростить ваш код.

Edit: Вот PyMOTW ElementTree учебника, и Docs python.org/xml.etree.ElementTree

+0

действительно я не знаю об этом модуле – user1423015