2016-06-07 95 views
0

SOLUTION: 變化ConfigParser.py 一切與\ n應是\ r \ N,這樣Linux和Windows可以讀取行返回文件。 這爲我們修復了它。Python 2.7版的Linux n到Windows r n

我正在Linux中編寫程序,它與Windows 10 PC進行通信。我從Windows PC獲取文件並使用Python ConfigParser設置新值。當我將它從Linux寫入Windows時,換行符會混亂。有沒有辦法在Python 2.7中很好地處理這個問題?

編輯1: 我們有一個內部配置的txt文件,我們從一個運行raspbarian的樹莓派3讀取它。

[header] 
source1 = variable1 
source2 = variable2 

如果被讀取並再次寫入的輸出中是如下因素:

[header]source1 = variable1source2 = variable2 

這種轉換之後,我們的窗戶10件TXT閱讀器無法讀取該文件了。

編輯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

請給一個例子。你可以簡單地用'\ r \ n'替換'\ n'。 – erip

+0

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

+1

在你的windows上獲取一個真正的文本編輯器。這是一個恥辱,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

除了標準fopen()函數值模式可以是 'U' 或 '的rU'。 Python通常使用通用換行符支持構建;提供'U' 以文本文件的形式打開文件,但行可以通過以下任一方式終止: 以下任何一種:Unix行尾約定'\ n',Macintosh 約定'\ r'或Windows慣例'\ r \ n'。

+0

問題在於,在ConfigParser中,我們確實從Pi設置了一些值。這不能用U值來完成。據我所知,wU值並不會激化 – NLxDoDge

+0

「Python強制在剝離'U'後以'r','w'或'a'開頭。」如果你正在閱讀某些Windows常規文本閱讀器的文本文件(我認爲「記事本」就是這樣一個例子),那麼以二進制模式打開文件(''b'')(以便換行符轉換不會)或者使用'io'模塊的'io.open('/ settings.cfg','rw',newline ='\ r \ n')'結構強制換行符到你需要的地方。 – 2016-06-07 14:37:50

相關問題