2013-05-16 67 views
1

我正在逐行讀取txt文件使用python 3內置readline()函數。此文件包含塊的員工信息,它看起來像這樣:python 3.0 readline()隨機跳轉

名字傑克\ n
姓加西亞\ n
經理姓名史密斯\ n
說明這是員工\ n的說明
bla bla bla blan n
bla bla bla blan n
bla bla bla bla。 \ n
工資25000 \ n

我的代碼如下所示:

with open(os.path.join(INPUT_FOLDER, filename)) as input_file: 
    for line in input_file: 
     if line.upper().startswith('DESCRIPTION'): 
      description = line.split('DESCRIPTION')[1].strip() 
      line = input_file.readline() 
      while not line.upper().startswith('SALARY'): 
       ... 

description可變的,但在執行input_file.readline()語句時,它跳到5條更遠線得到的預期值!所以我無法正確完成其餘的描述。讓我發瘋的是,我已經閱讀過以前在同一個文件中的其他員工信息塊,並且一切正常。

我執行使用的PyDev 2.7.1

有沒有人處理類似的問題的Eclipse下的腳本?它與IDE,python版本......有關嗎?

預先感謝您。

+0

「while」塊內的代碼是什麼? – Aya

回答

1

不能混合文件迭代和readline()。 Built-In Types doc for file.next()說:

「爲了使循環成爲循環遍歷文件行的最有效方式(一種非常常見的操作),next()方法使用隱藏讀因爲使用預讀緩衝區,所以將next()與其他文件方法(如readline())組合使用並不正確,但是使用seek()將文件重新定位到絕對位置將會沖洗預讀緩衝區「。

with open(os.path.join(INPUT_FOLDER, filename)) as input_file: 
    while True: 
     line = input_file.readline() 
     if not line: 
      break 
     if line.upper().startswith('DESCRIPTION'): 
      description = line.split('DESCRIPTION')[1].strip() 
      line = input_file.readline() 
      while not line.upper().startswith(SALARY): 
0

你是在大寫,但劈裂在未修改的情況下比較:

line.split('DESCRIPTION') 

此外,這

line = input_file.readline() 
while not line.upper().startswith(SALARY): 

似乎並沒有被添加到你的描述變量。

你可能需要添加

line = input_file.readline() 
while not line.upper().startswith(SALARY): 
    description += line 
    line = input_file.readline()