2011-02-03 81 views
2

我有一個StringIO對象被正確填充。我不是有下面的代碼:python字符串賦值

val = log_fp.getvalue() 
lines = val.split('\n') 
newval = '' 
for line in lines: 
    if (not line.startswith('[output]')): 
     newval = line 
     print 'test1'+newval  
print 'test2' +newval 
在循環

,我有newval打印正確的值,但在最後的打印,我有一個空字符串。任何想法我做錯了什麼?我需要的是提取標記爲[output]的stringIO對象中的一行,但newval在'test2'中似乎爲空。

+0

你有沒有嘗試在`newval`周圍添加單引號?這樣,你可以看到python是否正在打印換行符。 – Davidann 2011-02-03 15:58:40

+0

@David,split()不應該在行 – winwaed 2011-02-03 16:03:21

+0

的元素中包含換行符字符嗎?你想提取只有一行標記爲'[輸出]'還是所有標記爲這樣的行? – kevpie 2011-02-03 16:12:48

回答

0

是log_fp文本文件嗎? 如果是這樣,行中的最後一個值將是最後一個換行符後面的所有值。您的文件可能會以換行符或換行符和一些空格結尾。 對於前一種情況,行的最後一個值將是一個空字符串。 對於後一種情況,行的最後一個值將是空白。

爲了避免這種情況,您可以在if語句中添加一個新子句來檢查修剪後的字符串是否爲空,例如。

val = log_fp.getvalue() 
lines = val.split('\n') 
newval = '' 
for line in lines: 
    if (len(line.strip()) > 0): 
     if (not line.startswith('[output]')): 
      newval = line 
      print 'test1'+newval  
print 'test2' +newval 

(我沒有試過運行此,但它應該給你的想法)

4

拆分上「\ n」的如'foo\n'字符串會產生['foo', '']

1

我需要的是提取 線路中的StringIO對象即 標記爲[輸出]中的一個,

未測試:

content = log_fp.getvalue().split() 
output_lines = [x for x in content if x.startswith('[output'])] 

然後得到的第一個元素output_lines,如果這是你需要的。