Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从循环中的文件中读取特定行(优化)_Python - Fatal编程技术网

Python 从循环中的文件中读取特定行(优化)

Python 从循环中的文件中读取特定行(优化),python,Python,我正在读取文本文件中的特定行。这是我的密码: file.seek(0) for j, ln in enumerate(file): if j == line_number line = ln # i'm getting the line break 当我在循环中使用这段代码时,它花费了很长时间,循环中的行数是随机的。 我也尝试过linecache.getline,但每次都需要调用linecache.clearcache,所以这并不更好 有没有更快的解决方案?记

我正在读取文本文件中的特定行。这是我的密码:

file.seek(0)
for j, ln in enumerate(file):
   if j == line_number
      line = ln   # i'm getting the line
      break
当我在循环中使用这段代码时,它花费了很长时间,循环中的行数是随机的。 我也尝试过linecache.getline,但每次都需要调用linecache.clearcache,所以这并不更好


有没有更快的解决方案?记忆不重要。

如果记忆真的不重要:

lines = file.readlines()

line = lines[line_number]
您只需读取一次文件,将其存储在内存中,然后从内存中访问它

编辑:内存重要的地方:

from itertools import dropwhile

line = next(dropwhile(lambda x: x[0]==line_number, enumerate(file)))[1]

我们可以使用itertools.dropwhile忽略这些行,直到找到需要的行。

如果内存真的不重要:

lines = file.readlines()

line = lines[line_number]
您只需读取一次文件,将其存储在内存中,然后从内存中访问它

编辑:内存重要的地方:

from itertools import dropwhile

line = next(dropwhile(lambda x: x[0]==line_number, enumerate(file)))[1]
我们可以使用itertools.dropwhile忽略这些行,直到找到所需的行。

在循环上方使用以下命令:

现在访问循环中的任何行号:

在循环上方使用此选项:

现在访问循环中的任何行号:

其他方法

import linecache
linecache.getline('myfile', line_number)
其他方法

import linecache
linecache.getline('myfile', line_number)

你为什么用rstrip?询问者没有提到需要这样做。@Hern for in-loop比readlines更节省内存,文件只能访问一次。@AshwiniChaudhary什么?为什么这比读线效率更高?读线一次读取整个文件,所以在一个大文件的情况下,这种方法会降低内存效率。但是对于小文件来说,readline比readline快得多。@AshwiniChaudhary除非是在你的情况下,你可以逐行阅读,但是你可以从中构建一个列表。如果readlines通过列出所有行使用了太多内存,那么手动列出也会这样做。您的声明仅适用于您正在处理每一行,然后丢弃该行。您为什么使用rstrip?询问者没有提到需要这样做。@Hern for in-loop比readlines更节省内存,文件只能访问一次。@AshwiniChaudhary什么?为什么这比读线效率更高?读线一次读取整个文件,所以在一个大文件的情况下,这种方法会降低内存效率。但是对于小文件来说,readline比readline快得多。@AshwiniChaudhary除非是在你的情况下,你可以逐行阅读,但是你可以从中构建一个列表。如果readlines通过列出所有行使用了太多内存,那么手动列出也会这样做。您的声明仅适用于您正在处理每一行,然后丢弃该行的情况。