我是 Python 初学者。 我试图解决这个问题:“如果我们有一个包含<1000行的文件,如何只打印奇数行?”。这是我的代码:
with open(r'C:\Users\Savina\Desktop\rosalind_ini5.txt')as f:
n=1
num_lines=sum(1 for line in f)
while n<num_lines:
if n/2!=0:
a=f.readlines()[n]
print(a)
break
n=n+2
其中n是一个计数器,num_lines计算文件包含的行数。 但是当我尝试执行代码时,它说:
"a=f.readlines()[n]
IndexError: list index out of range"
为什么它不能将n识别为计数器?
最佳答案
您可以在循环中调用readlines
,但这不是它的预期用途,
因为 readlines 会立即提取整个文件,并返回一个 LIST
换行符终止的字符串。
您可能想要保存这样的列表并对其进行操作
list_of_lines = open(filename).readlines() # no need for closing, python will do it for you
odd = 1
for line in list_of_lines:
if odd : print(line, end='')
odd = 1-odd
两点说明:
odd
在1
(因此当if
参数时为 true)或0
(因此为 false当if
的参数时),print
函数需要可选参数end=''
,因为list_of_lines
中的每一行都以换行符终止,如果省略可选参数,print
函数将在每行末尾输出第二个换行符。
回到您的代码,您可以使用以下方法修复其行为
f.seek(0)
在循环之前将文件倒回到其开始位置并使用
f.readline()
(看,它不是 readline**S**
)循环内的方法,
但请放心,这样的处理是。这么说吧,有点不传统......
最终,你可以用一句话做任何事情
print(''.join(open(filename).readlines()[::2]))
关于python - .readlines()[n] 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39997324/