2014-02-26 64 views
0
class XXFile: 

    def __init__(self, FileName): 
     self.File = FileName 

    def Process (self): 
     for self.Line in open (self.File): 
      self.SetFlds() 

    def SetFlds (self): 
     Write2Log ("Inside the SetFlds()->Line::[" + self.Line + "]" ) 
     Write2Log ("Test->Line22,34::[" + self.Line [ 22 : 34 ].strip() + "]") 

MyFile = XXFile("a.txt") 
MyFile.Process() 

輸出Python的自我價值是不正確進入成員函數?

2014-02-26T20:41:47| Inside the SetFlds()->Line::[XXXX   9999999      XXXXXXXXXXXXXXXXXXXXXXX ABCDE] 
2014-02-26T20:41:47| Test->Line22,34::[] 

從長度34 22爲什麼我沒有得到角色?我得到完整的所有字符self.Lin在setflds()和但切片self.Line不工作..

+1

它的工作很好,除了片只包含空格和'帶()'刪除所有的人。另外,*請*不要在變量和方法名稱中使用大寫字母,在Python中,您只能將它們用於類名稱。 – RemcoGerlich

回答

2

你的線路上有空白;人物22到34或者是空格或製表符,和.strip()呼叫刪除這些人物,讓你有一個空字符串:

>>> line = 'XXXX   9999999      XXXXXXXXXXXXXXXXXXXXXXX ABCDE' 
>>> line[22:34] 
'   ' 
>>> len(line[22:34]) 
12 
>>> line[22:34].strip() 
'' 
>>> len(line[22:34].strip()) 
0 
0

從長度34 22爲什麼我沒有得到角色?

self.Line[22:34]得到(至多)34-22 = 12個字符開始於索引位置22。要獲得34個字符,使用

self.Line[22:56] 

In [18]: line = 'XXXX   9999999      XXXXXXXXXXXXXXXXXXXXXXX ABCDE' 

In [20]: line[22:56].strip() 
Out[20]: 'XXXXXXXXXXX' 

在這裏看到的explanation of Python slicing


此外,您可能使用str.split會更好:

In [21]: line.split() 
Out[21]: ['XXXX', '9999999', 'XXXXXXXXXXXXXXXXXXXXXXX', 'ABCDE']