2011-06-25 74 views
-1

我正在閱讀一個文本文件,我知道它的第38行是「Uncalibrated Peaks:」,我知道它存儲在我的列表的第38個元素中。我已經檢查過它們,並且沒有索引問題。在閱讀python中的文本文件後出現奇怪的字符串行爲

我對下面的代碼

import os 

fd = open('Report.txt') 
contents = fd.readlines() 
fd.close() 

for ind, line in enumerate(contents): 
    line = line.split(" ") 
    contents[ind] = line 

閱讀的文本文件,但我們我的

print len(contents[38][0]) 

25檢查在第38行第一個字的情況下長,我知道這個命令提到列表中的正確元素,所以沒有索引問題

print len('Uncalibrated') 

!!儘管理論上它們應該是相同的。似乎每個字符在字符串向量中佔據2位,這似乎是由於unicodeing問題

+8

我希望在問這個問題之前,你真的嘗試過'打印內容[38] [0]'。 – senderle

+0

我剛寫下這個數字,以便讓那些完全沒有閱讀問題的人知道! ,我希望我在第一行寫道,我知道文本肯定位於列表的第38個元素中 – user702846

+1

當您說「第38行」時,您是將第一行計爲第1行還是第0行。這些愚蠢的計算機現在開始在0,不喜歡我們人類。 – PaulMcG

回答

3

通常,如果看起來字符串中的字符「太寬」,那麼您可能有一個unicode文件。嘗試使用unicode function轉換它。

看上面的代碼看起來更像是一個簡單的索引錯誤。

+0

['x00u \ x00n \ x00c \ x00a \ x00l \ x00i \ x00b \ x00r \ x00a \ x00t \ x00e \ x00d \ x00','\ x00P \ x00e \ x00a \ x00k \ x00s \ x00:\ x00 \ r \ x00 \ n'] 您是對的,那麼我該如何更改或修改條目ro刪除這些\ xooU – user702846

+2

儘管這不是unicode。你的字符串充斥着空字符(\ x00事情)。我不知道爲什麼,但它顯然與首先寫入文件的應用程序有關。然而,這些字符很容易被刪除: 'nice_string = filter(lambda x:x!='\ x00',weird_string)' –

+2

這實際上可能是Unicode(big-endian UTF-16, )。 – kindall

1

你試過contents[37][0]?第38行應該是在指數37,因爲索引從0開始。

+0

有些人甚至不讀其他人的評論和迴應,只是寫一些答案來獲取一些東西,Senderle在他的評論中提到這件事!這是堆棧的壞處。 – user702846

+0

我不同意他這麼做。他說你應該調試你的代碼,我完全同意他的觀點。另一方面,我告訴你,你可能在這裏有索引問題。而且,在添加我之前我沒有看到他的評論(不是說這會有什麼區別)。 – jena

0

嘗試

if ind == 38: 
    print line 
line = line.split() 

確認這是你想要的,並把它分解線。就像上面的海報說的那樣,你也可能會誤讀這條線。

0
fd = open('foo.html') 
contents = fd.readlines() 
fd.close() 

for ind, line in enumerate(contents): 
    line = line.split(" ") 
    contents[ind] = line 

print contents,'\n\n------------------' 


fd = open('foo.html') 
li = fd.readlines() 
fd.close() 

a = map(lambda x: x.split(" "),li) 
print a,'\n',a==contents,'\n\n------------------' 


fd = open('foo.html') 
b = [line.split(" ") for line in fd] 
fd.close() 

print b,'\n',b==contents 
相關問題