2016-06-07 3 views
0

РЕШЕНИЕ: Изменить ConfigParser.py Все с \ п должна быть \ г \ п, таким образом, Linux и окна могут читать файл с возвращением строки. Это исправлено для нас.Python 2.7 Linux п в папке Windows г п

Я пишу программу в Linux и общаюсь с ПК с Windows 10. Я получаю файл с ПК с Windows и с помощью Python ConfigParser устанавливаю новые значения. Когда я пишу его из Linux в Windows, новые строки перепутаны. Есть ли способ справиться с этим в Python 2.7?

EDIT 1: У нас есть файл txt с конфигурацией внутри него, мы читаем его из малины Pi 3, работающей на распирании.

[header] 
source1 = variable1 
source2 = variable2 

, если это время для чтения и записи снова Ouput как folowing:

[header]source1 = variable1source2 = variable2 

После этого преобразования наших окон 10 шт читатель TXT не может больше читать файл.

EDIT 2: возможно, это поможет. Это блок кода из ConfigParser.py:

def write(self, fp): 
    """Write an .ini-format representation of the configuration state.""" 
    if self._defaults: 
     fp.write("[%s]\n" % DEFAULTSECT) 
     for (key, value) in self._defaults.items(): 
      fp.write("%s = %s\n" % (key, str(value).replace('\n', '\n\t'))) 
     fp.write("\n") 
    for section in self._sections: 
     fp.write("[%s]\n" % section) 
     for (key, value) in self._sections[section].items(): 
      if key == "__name__": 
       continue 
      if (value is not None) or (self._optcre == self.OPTCRE): 
        key = " = ".join((key, str(value).replace('\n', '\n\t'))) 
      fp.write("%s\n" % (key)) 
     fp.write("\n") 
+2

Пожалуйста, дайте пример. Вы можете просто заменить '\ n' на' \ r \ n'. – erip

+0

http://stackoverflow.com/a/13954932/4889267 – AK47

+1

Получите реальный текстовый редактор на своих окнах. Жаль, что в 2016 году все еще есть текстовые редакторы, которые не могут читать оба стиля. – spectras

ответ

0

Может быть, не лучший способ, но теперь я работает следующим способом:

В /usr/lib/python2.7/ConfigParser.py сделать следующее:

"""Write an .ini-format representation of the configuration state.""" 
     if self._defaults: 
      fp.write("[%s]\r\n" % DEFAULTSECT) 
      for (key, value) in self._defaults.items(): 
       fp.write("%s = %s\r\n" % (key, str(value).replace('\n', '\n\t')$ 
      fp.write("\r\n") 
     for section in self._sections: 
      fp.write("[%s]\r\n" % section) 
      for (key, value) in self._sections[section].items(): 
       if key == "__name__": 
        continue 
       if (value is not None) or (self._optcre == self.OPTCRE): 
         key = " = ".join((key, str(value).replace('\n', '\n\t')$ 
       fp.write("%s\r\n" % (key)) 
      fp.write("\r\n") 
2

В вашем вызове, чтобы прочитать файл-подобный объект, вы должны передать в U флаг для перекрестной совместимости. например

import ConfigParser 

conf = ConfigParser.ConfigParser() 
conf.readfp(open('/tmp/settings.cfg', 'U')) 
... 

Пер с 2.7 documentation:

В дополнение к стандартным Еореп() значения Режим может быть 'U' или 'Rü'. Python обычно построен с поддержкой универсальной новой строки; Поставка 'U' открывает файл в виде текстового файла, но строки могут быть прерваны любым из следующим: соглашение о конце строки '\ n', соглашение Macintosh '\ r' или Windows конвенция '\ r \ n'.

+0

Проблема заключается в том, что в ConfigParser мы устанавливаем некоторые значения из Pi. Это невозможно сделать с помощью значения U. И значение wU не возбуждает, насколько я знаю – NLxDoDge

+0

«Python обеспечивает, чтобы режим после удаления« U »начинался с« r »,« w »или« a ».». Если вы читаете текстовый файл из некоторого текстового редактора Windows-условного обозначения (я думаю, что «блокнот» является таким примером), то либо открывайте файл в двоичном режиме ('' b' ') (так что преобразование символа новой строки не " t) или используйте '' io.open '' ('/ settings.cfg', 'rw', newline = '\ r \ n') модуля 'io', чтобы заставить новую строку использовать то, что вам нужно. –