停止劣等开始在python范围

时间:2018-07-20 07:24:39

标签: python for-loop range

如果文件包含给定行start_line之后的文本,我想从文本文件中读取值。

我正在使用这种方法导入文件:

with open("filename", "r") as file:
    file_contents = file.readlines()

这样做会是一个不好的做法吗?

for line in range(start_line, len(file_contents)):
    ... reading contents of line ...

我注意到,如果start <= stop,range(start,stop)返回一个空列表,并且跳过了for循环。

在循环之前添加是否无用地多余:

if len(file_contents) > start_line:

3 个答案:

答案 0 :(得分:1)

条件:

if len(file_contents) > start_line:

实际上在逻辑上等同于循环中发生的事情:

for line in range(start_line, len(file_contents)):
    ... reading contents of line ...

因此,这将是逻辑上等效的条件的重复-充其量是不必要的。

答案 1 :(得分:1)

我会避免像这样使用range()。您已经将所有数据读入file_contents。除非我错过了什么,否则

for line in file_contents[start_line:]:
    ... process data in line ...

会做我想做的事。

答案 2 :(得分:1)

作为用于处理稀缺资源的古老恐龙,我不喜欢在可以避免的情况下将整个文件加载到内存中。所以我会做:

with open("filename", "r") as file:
    for numline, line in enumerate(file):      # skip up to start_line-1
        if numline == start_line - 1: break
    if num_line == start_line - 1:             # Ok file is long enough
        for line in file:                      # process end of file
            ...

但是,如果仅处理小文件,这将是无用的优化...