python - .readlines()[n] 错误

标签 python python-3.x while-loop

我是 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

两点说明:

  1. odd1(因此当 if 参数时为 true)或 0(因此为 false当 if 的参数时),
  2. print 函数需要可选参数 end='',因为 list_of_lines 中的每一行都以换行符终止,如果省略可选参数,print 函数将在每行末尾输出第二个换行符。

回到您的代码,您可以使用以下方法修复其行为

f.seek(0)

在循环之前将文件倒回到其开始位置并使用 f.readline() (看,它不是 readline**S**)循环内的方法, 但请放心,这样的处理是。这么说吧,有点不传统......

最终,你可以用一句话做任何事情

print(''.join(open(filename).readlines()[::2]))

使用 slice notation for list s 和 string method .join()

关于python - .readlines()[n] 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39997324/

相关文章:

python - 如何将不需要模型的应用程序添加到 django 管理站点?

python - 使用 Pandas 将多行转换为单行

python - 对 python、列表/生成器对象感到困惑

python-3.x - 通过 Airflow 提交到 Dataproc 的失败 Hive 作业的日志链接

python - 如何在Python3中使用selenium检查复选框

正则表达式返回一组中的所有匹配项

python - 如何将标准输出放入 Tkinter、python 中的文本中?

python - 循环运行 .py 文件

bash - 如何将 grep 重定向到 while 循环

C 以用户输入结束循环