2012-03-04 186 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