2011-06-24 65 views
1

Python新手,試圖學習文件I/O的繩索。Mac上的Python readline()

用這種格式從一個大的(2元線)文件牽引繩索工作:

56fr4 
4543d 
4343d 
hirh3 

我一直在讀的ReadLine()是最好的,因爲它不拉整個文件到內存。但是當我嘗試讀取它上面的documentation時,它似乎只是Unix?我在Mac上。

我可以在Mac上使用readline而不將整個文件加載到內存中嗎?簡單地在文件中讀取第3行的語法是什麼?文檔中的示例稍微凌亂了一些。

編輯

這裏是返回一個代碼的功能:

def getCode(i): 
    with open("test.txt") as file: 
     for index, line in enumerate(f): 
      if index == i: 
       code = # what does it equal? 
       break 
    return code 
+1

的Readline是處理終端鍵盤輸入庫。它與閱讀文件無關。 –

+1

@DanielRoseman請參閱我的評論關於您的混淆file.readline()和readline模塊。 –

回答

11

你不需要readline

with open("data.txt") as file: 
    for line in file: 
     # do stuff with line 

這將讀取整個文件中的行由行,但不是一次全部(所以你不需要所有的記憶)。如果您想中止讀取文件,因爲您找到了所需的行,請使用break來終止該循環。使用libedit 庫在MacOS X上的readline模塊 可以實現:如果你知道你想要的行的索引,使用:

with open("data.txt") as file: 
    for index, line in enumerate(file): 
     if index == 2: # looking for third line (0-based indexes) 
      # do stuff with this line 
      break # no need to go on 
+0

我將如何返回第三行?只是想確保我理解的語法.. – some1

+0

@ some1:更新我的答案,以顯示如何按數字查找特定的行。 –

+0

非常有幫助,非常感謝。我本來可能會一直搞亂readline的方式。 – some1

0

從你所引用的文件:

注而不是GNU readline。 libedit的 配置文件是 ,與GNU readline的配置文件不同。 如果以編程方式加載 配置字符串,則可以在 readline中檢查 以獲得文本「libedit」。 doc在GNU readline和libedit之間區分 。

+1

感謝您粘貼我鏈接到的文檔,但我真的不明白這意味着什麼。這就是我發佈的原因。 – some1

+1

[readline method of file object](http://docs.python.org/library/readline.html)與[readline module for history with history/completion]之間似乎存在一些混淆, (http://docs.python.org/library/readline.html)。 –

0

+1 @ SpaceC0wb0y

你也可以這樣做:

f = open('filepath') 
f.readline() # first line - let it pass 
f.readline() # second line - let it pass 
third_line = f.readline() 
f.close()