Pythonic忽略循环控制变量的方法

Gre*_*att 14 python

我正在编写的Python程序是从文件顶部读取一定数量的行,程序需要保留此标题以备将来使用.目前,我正在做类似以下的事情:

header = ''
header_len = 4
for i in range(1, header_len):
    header += file_handle.readline()
Run Code Online (Sandbox Code Playgroud)

Pylint抱怨说我没有使用变量i.什么是更pythonic方式来做到这一点?

编辑:程序的目的是智能地将原始文件拆分为较小的文件,每个文件包含原始标题和数据的子集.因此,在读取文件的其余部分之前,我需要读取并保留标题.

Sil*_*ost 13

f = open('fname')
header = [next(f) for _ in range(header_len)]
Run Code Online (Sandbox Code Playgroud)

由于您要将标题写回新文件,因此您无需对其执行任何操作.要将其写回新文件:

open('new', 'w').writelines(header + list_of_lines)
Run Code Online (Sandbox Code Playgroud)

如果您知道旧文件中的行数,list_of_lines将变为:

list_of_lines = [next(f) for _ in range(chunk_len)]
Run Code Online (Sandbox Code Playgroud)

  • 直截了当,易于理解,并消除了针灸投诉.因此,这是最好的答案,IMO. (3认同)

Dav*_*dge 11

我不确定Pylint规则是什么,但你可以使用'_'一次性变量名.

header = ''
header_len = 4
for _ in range(1, header_len):
    header += file_handle.readline()
Run Code Online (Sandbox Code Playgroud)


小智 10

import itertools

header_lines = list(itertools.islice(file_handle, header_len))
# or
header = "".join(itertools.islice(file_handle, header_len))
Run Code Online (Sandbox Code Playgroud)

请注意,对于第一个,换行符仍将存在,以剥离它们:

header_lines = list(n.rstrip("\n")
                    for n in itertools.islice(file_handle, header_len))
Run Code Online (Sandbox Code Playgroud)

  • itertools?f中的行有什么问题? (4认同)