如何让python读取.txt文件的每一行?

时间:2017-11-01 19:41:49

标签: python loops for-loop

如果我想让python读取文件的每一行(或每四行),我怎么能告诉它这样做?另外,如果我想读取.txt文件的第2行,但是之后每4行(下一行是第6行,然后是10,依此类推),我怎么能这样做呢?

4 个答案:

答案 0 :(得分:3)

您不能...... [使用纯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]

答案 1 :(得分:2)

您可以open file作为f with语句iterate。然后,您可以使用Python的line符号file slicing中的每个f.read() {/ 1}}。

如果我们采用string,我们会在每个new-line的末尾得到一个\nline)字符的"line1\nline2\nline3\n"

list

所以要将其转换为lines slice,以便我们可以line获取其他所有split,我们需要\n它每次出现f.read().split()

["line1", "line2", "line3"]

对于上面的例子将给出:

line

最后,我们需要获得所有其他slice,这是通过[::2] slicing完成的。我们从list[start : stop : step] 的工作方式知道这一点:

for-loop

使用这一切,我们可以写一个iterate line通过彼此with open("file.txt", "r") as f: for line in f.read().split("\n")[::2]: print(line)

spring-jcl

答案 2 :(得分:1)

晚了一点,但这是一种解决方案,不需要立即将整个文件内容读入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)允许遍历行。这意味着如果不需要,我们可以逐行读取文件而无需累积所有行。要选择第 n 条线,我们使用模运算符以及当前行号和所需的步长。

答案 3 :(得分:-1)

解决此问题的另一种方法,

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)

希望这会有所帮助!!