如何让python读取.txt文件的每N行?
如果我想让python每隔2行(或每4行)读取一个文件,我怎么能告诉它这样做?此外,如果我想读取.txt文件的第2行,但之后每隔4行(下一行是第6行,然后是第10行,依此类推),我怎么能让它这样做呢?你不能。。。[使用纯I/O函数执行]您必须读取所有行,只需让代码忽略不需要的行 例如:如何让python读取.txt文件的每N行?,python,loops,for-loop,Python,Loops,For Loop,如果我想让python每隔2行(或每4行)读取一个文件,我怎么能告诉它这样做?此外,如果我想读取.txt文件的第2行,但之后每隔4行(下一行是第6行,然后是第10行,依此类推),我怎么能让它这样做呢?你不能。。。[使用纯I/O函数执行]您必须读取所有行,只需让代码忽略不需要的行 例如: with open(filename) as f: lines = f.readlines() desired_lines = lines[start:end:step] 在上面的代码中,使用所需的值替
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
语句以f
的形式打开文件。然后,您可以使用Python的切片
表示法对文件
中的每一行
进行迭代
如果我们采用f.read()
,我们会得到一个字符串,在每行的末尾有一个新行(\n
)字符:
"line1\nline2\nline3\n"
with open("file.txt", "r") as f:
for line in f.read().split("\n")[::2]:
print(line)
因此,要将其转换为行的列表
,以便我们可以切片
以获得每一行
,我们需要在每次出现\n
时对其进行拆分
:
f.read().split()
对于上述示例,将给出:
["line1", "line2", "line3"]
最后,我们需要每隔行
,这是通过切片
[::2]
完成的。我们从切片
的工作方式知道这一点:
list[start : stop : step]
使用所有这些,我们可以编写一个for循环
,它将每隔行迭代一次
:
"line1\nline2\nline3\n"
with open("file.txt", "r") as f:
for line in f.read().split("\n")[::2]:
print(line)
解决这个问题的另一个办法,
def readFile(lineNo):
with open("read.txt", "r") as ins:
array = []
for line in ins:
array.append(line)
for i in range(1, len(array)):
print(array[i*lineNo - 1])
readFile(2)
希望这有帮助 聚会有点晚了,但这里有一个解决方案,不需要立即将整个文件内容读取到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)
文件对象(句柄
)允许在行上迭代。这意味着,如果不需要,我们可以逐行读取文件,而不必累加所有行。要选择每个第n行,我们使用具有当前行号和所需步长的模运算符。Python不使用数组,而是使用列表,这是行不通的…您还需要在函数定义的结尾和调用函数之间留出一个空格。这只是变量的名称,您是否尝试过执行此代码?是的,它在许多方面都失败了。。。我知道它只是一个变量
名称,但它只是表示缺乏理解,仅此而已。它会给出一个索引器
,即使在调用函数之前留下一行。这是因为您正在将文件中的所有行添加到列表中,然后在列表中的每个索引中迭代。然后,尝试从该索引的列表中获取值,并将其乘以输入。这意味着,除非输入是1
,否则您将尝试获取列表中的一个元素,该元素已经结束-提供一个索引器
。您可以通过使第二个for循环
转到len(array)/lineNo
来修复错误。尽管如此,你的atm代码并不像我说的那样有效。我不知道为什么你的答案被否决了,但我可以向你保证,不是我。@AGNGazer别担心,我不是在指责任何人,我只是想看看有人认为这没什么用。。。不带注释的向下投票没有多大帮助可能是这样的事实:它将整个文件读入一个字符串,而不是逐行迭代文件…向下投票是因为这样的语句:“您必须读取所有行,只需让代码忽略不需要的行”。不正确也不必要,请参见此处的其他答案。。。这将创建两个不必要的列表对于第二个示例“从第2行开始”和“每4行执行一次”将失败。您可能希望使用第6行,但6%4!=0
。。。