2024-03-29 09:27:09 发布
网友
有点晚了,但这里有一个解决方案,不需要一次将整个文件内容读入RAM,这可能会在处理足够大的文件时造成麻烦:
# Print every second line. step = 2 with open("file.txt") as handle: for lineno, line in enumerate(handle): if lineno % step == 0: print(line)
文件对象(handle)允许在行上迭代。这意味着如果不需要,我们可以逐行读取文件,而不必累加所有行。为了选择每一行,我们使用带当前行号和所需步长的模运算符。
handle
你不能。。。[使用纯I/O函数]您必须阅读所有行,并使代码忽略不需要的行。
例如:
with open(filename) as f: lines = f.readlines() desired_lines = lines[start:end:step]
在上面的代码中,将start、end和step替换为所需的值,例如,“…如果我想读取.txt文件的第2行,但之后每4行…您应该这样做:
desired_lines = lines[1::4]
您可以首先使用with语句open将file作为f。然后,您可以使用Python的slicing符号iterate通过line中的每个file。
with
open
file
f
slicing
iterate
line
如果取f.read(),则在每个line结尾处都有一个new-line(\n)字符:
f.read()
new-line
\n
"line1\nline2\nline3\n"
因此,要将其转换为list的lines以便我们可以slice它得到彼此的line,我们需要split它在每次出现\n时:
list
lines
slice
split
f.read().split()
对于上述示例,将给出:
["line1", "line2", "line3"]
最后,我们需要每隔一个line,这是用slice[::2]完成的。我们从slicing的工作方式知道这一点:
[::2]
list[start : stop : step]
使用所有这些,我们可以编写一个for-loop,它将iterate通过其他line:
for-loop
with open("file.txt", "r") as f: for line in f.read().split("\n")[::2]: print(line)
有点晚了,但这里有一个解决方案,不需要一次将整个文件内容读入RAM,这可能会在处理足够大的文件时造成麻烦:
文件对象(
handle
)允许在行上迭代。这意味着如果不需要,我们可以逐行读取文件,而不必累加所有行。为了选择每一行,我们使用带当前行号和所需步长的模运算符。你不能。。。[使用纯I/O函数]您必须阅读所有行,并使代码忽略不需要的行。
例如:
在上面的代码中,将start、end和step替换为所需的值,例如,“…如果我想读取.txt文件的第2行,但之后每4行…您应该这样做:
您可以首先使用
with
语句open
将file
作为f
。然后,您可以使用Python的slicing
符号iterate
通过line
中的每个file
。如果取
f.read()
,则在每个line
结尾处都有一个new-line
(\n
)字符:因此,要将其转换为
list
的lines
以便我们可以slice
它得到彼此的line
,我们需要split
它在每次出现\n
时:对于上述示例,将给出:
最后,我们需要每隔一个
line
,这是用slice
[::2]
完成的。我们从slicing
的工作方式知道这一点:使用所有这些,我们可以编写一个
for-loop
,它将iterate
通过其他line
:相关问题 更多 >
编程相关推荐