2015-07-10 47 views
-1

我有以下代碼:rstrip不工作(Python 2.7版)

file = open("file", "r") 

array = file.readlines() 

stats = [1, 1, 1, 1, 1] # creating an array to fill 

print array 

sh1 = array[1] # breaking the array extracted from the text file up for editing 

sh2 = array[2] 

sh3 = array[3] 

sh4 = array[4] 

stats[0] = string.rstrip(sh1[1]) 

stats[1] = string.rstrip(sh2[1]) 

stats[2] = string.rstrip(sh3[1]) 


stats[3] = string.rstrip(sh4[1]) 

print stats 

我期待它剝去從文本文件中提取的陣列的新行和新的數據放置到一個單獨的數組。相反,我正在從變量的任何一端刪除看似隨機數量的字符。請有人解釋我做錯了什麼?

+0

'string'從哪裏來? –

+0

你爲什麼只用1來填充你的數組,以便以後替換它們? –

+0

你有目的地從'1'開始索引嗎?請記住,Python中的列表索引是從零開始的。 – werkritter

回答

1

您應該使用with打開文件,您不需要先調用readlines。你可以簡單地遍歷file object列表中的理解呼籲rstrip每行:

with open("file") as f: # with closes your file automatically 
    stats = [line.rstrip() for line in f] 

爲什麼你的代碼刪除隨機字符,是因爲你是路過隨機字符去掉,你是從秒經過第二個字符,第三,第四和第五分別rstrip和從線1,2,3和所以取決於什麼字符串與結束剝離和你通過不同的字符將被刪除。你可以通過無子,以消除任何空白或指定某些字符:

In [3]: "foobar".rstrip("bar") 
Out[3]: 'foo' 
In [4]: "foobar \n".rstrip() 
Out[4]: 'foobar' 

也沒有辦法,你是從字符串前刪除數據,除非你完全剝離的字符串。最後,如果你真的想跳過第一行,並從2行開始,那麼在迭代理解之前,你只需要在文件對象上調用next(f)即可。

+0

在您回覆之前,我不知道該怎麼辦。非常感謝你! – Jay

+0

另外,非常感謝你爲什麼我的代碼不工作的完整解釋。這正是我從這個問題中尋找的。 – Jay

+0

沒有問題,不客氣 –

3

sh1,sh2,sh3,sh4是字符串,所以sh1[1]是字符串中的第二個字符。 rstrip將刪除尾隨空格,所以你會將1或0個字符串放入結果數組中。

我懷疑你想要的東西,如:

stats = [] 
for line in open("file").readlines(): 
    line = line.rstrip() 
    stats.append(line) 

print stats 

或全部在一行:

print [ l.rstrip() for l in open("file").readlines() ] 
+0

我懷疑string.rstrip是指https://docs.python.org/2/library/string.html#string.rstrip –

+0

哦好吧,沒有看到'string.'。 –

+0

另外,如果您只想剝離換行符,請使用'line.rstrip('\ r \ n')'。 – werkritter

2

使用列表理解。

array = file.readlines() 
print [i.rstrip() for i in array]