如果文件包含给定行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:
答案 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
...
但是,如果仅处理小文件,这将是无用的优化...