2012-03-04 126 views
1

我需要從一個文件中得到一個特定的行號,我將其傳遞到我編寫的一個python程序中。我知道我想要的那一行是第5行,那麼有沒有辦法我只需要抓住第5行,而不必遍歷文件?python閱讀文件

+1

除非你知道線5的特定緩衝器的位置,你_must_通過線1-4迭代達到5行。這是因爲線由換行符的存在下測定文件內的'\ n'。這是你問的嗎?或者你的意思是,你不想加載_entire_文件來檢索第5行? – 2012-03-04 13:27:04

回答

3

如果你知道你有興趣的行之前有多少個字節,那麼你可以在seek那裏讀出一行。否則,「行」不是第一個類構造(它只是一個字符的列表,由一個字符結尾,您將賦予一個特殊含義 - 換行符)。要找到這些換行符,您必須讀入文件。

實際上,您可以使用readline方法讀取5行,然後讀取您的行。

你爲什麼要這麼做?

+0

我需要爲我的AI課程做一些項目。基本上,我正在傳遞一個文本文件,並且我知道第5行包含我解算器的塊數。它本質上是一個將文本文件轉換爲SAT實例的程序。 – Zack 2012-03-04 07:48:08

+0

這很好。爲什麼你需要*跳過直到第5行。閱讀和丟棄它們有什麼不對? – 2012-03-04 15:22:39

+0

我可以做到這一點..我只需要能夠得到第五行的任何東西。 – Zack 2012-03-05 01:41:58

0

我認爲下列應該做的:

line_number=4 

# Avoid reading the whole file 
f = open('path/to/my/file','r') 
count=1 
for i in f.readline(): 
    if count==line_number: 
     print i 
     break 
    count+=1 

# By reading the whole file 
f = open('path/to/my/file','r') 
lines = f.read().splitlines() 
print lines[line_number-1]  # Index starts from 0 

這應該給你的文件中的第4行。

+0

這看起來像它會工作,但我需要抓住從命令行傳入的文件...所以像 python myprogram blocks.txt 而我需要從blocks.txt抓住第5行 – Zack 2012-03-04 07:53:33

+0

唯一這個解決方案的問題是它會將整個文件讀入內存。 – 2012-03-04 07:54:55

+0

固定..加入另一個waay。 – 2012-03-04 07:55:00

3

可以使用linecache

import linecache 
get = linecache.getline 
print(get(path_of_file, number_of_line)) 
+0

不錯。我不知道這個模塊。雖然我不確定它在這裏解決了問題。 – 2012-03-04 15:23:11

+0

查看我的示例並查看文檔;) – Fred 2012-03-04 18:04:47