如果我想让python读取文件的每一行(或每四行),我怎么能告诉它这样做?另外,如果我想读取.txt文件的第2行,但是之后每4行(下一行是第6行,然后是10,依此类推),我怎么能这样做呢?
答案 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
的末尾得到一个\n
(line
)字符的"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)
希望这会有所帮助!!