2014-02-26 155 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']