2013-08-01 52 views
3

我想將Python多行字符串轉換爲單行。如果我在Vim中打開字符串,我可以在每行的開始處看到^ M。如何處理字符串,以便在每行之間分隔標籤的情況下將其全部放在一行中。例如,在Vim的樣子:python convert multiline to single line

Serialnumber 
^MName   Rick 
^MAddress   902, A.street, Elsewhere 

我想它是這樣的:

Serialnumber \t Name \t Rick \t Address \t 902, A.street,...... 

每個字符串一行。我試過

somestring.replace(r'\r','\t') 

但它不起作用。另外,如果我想在字符串末尾添加一個換行符(UNIX換行符?),那麼一旦該字符串位於單行中,我該怎麼做?

回答

4

刪除我以前的答案,因爲我意識到這是不對的,我需要測試這個解決方案。

假設你從文件中讀這篇文章,你可以做到以下幾點:

f = open('test.txt', 'r') 
lines = f.readlines() 
mystr = '\t'.join([line.strip() for line in lines]) 

由於EP0表示,^ M代表「\ r」,它在Windows回車符。由於窗口換行字符是\ r \ n,所以在每行的開頭會出現^ M令人驚訝。在行首有^ M表示你的文件包含\ n \ r。

無論如何,上面的代碼都使用列表理解來遍歷從test.txt讀取的每一行。對於lines中的每個line,我們調用str.strip()以從每行的ENDS中刪除任何空格和非打印字符。最後,我們在結果列表上調用'\t'.join()來插入選項卡。

+0

我試過 newstring ='\ t'.join(somestring).replace('\ r','') 但是,當我讀取文件時,它給了我垃圾值。沒有這條線,它的可讀性(但是在多行中) – user2441441

+0

不幸的是我沒有從文件中讀取它。我不確定我是否可以使用.strip()。我在這個'somestring'中得到我想要的,並在循環中將這個'somestring'寫入文件。所以我希望在將文件寫入文件之前將「somestring」放在一行中。 – user2441441

+0

以防萬一你沒有注意到,我刪除了我以前的答案。這個答案使用strip()去除「\ n」和「\ r」。我希望我能夠快速避免看到我以前的答案,但我想我錯了。 – Vorticity

0

這發生在VIM如何解釋CR(回車),由Windows用來分隔新行。你應該只使用一個編輯器(我個人比較喜歡VIM)。閱讀:VIM ^M

+0

好的。所以如果我用二進制'wb +'模式打開一個空白文件,當我從記事本中讀取字符串時,它不再像Vim那樣有一個新行。 Vim與上面給出的格式完全相同,即它讀取換行符。那麼現在應該如何把它放在單線上呢? – user2441441

1

您可以用「\ t」替換「\ r」字符。

my_string.replace("\r", "\t") 
+0

這沒有奏效。我不知道爲什麼。 – user2441441

+0

我確實,對不起。我刪除了那個答案,所以我可以在看到那個答案之前貼出一個新答案。顯然我太慢了。看到我的新答案。它應該工作。 – Vorticity