对您的程序进行最小的更改以使其执行您想要的操作,不引入任何新概念,如下所示:
my_file = open("thisFile.txt", "r")
out_file = open("thatFile.txt", "w")
i = 1
for line in my_file:
if i % 2 != 0:
print(line, file=out_file)
i += 1
my_file.close()
out_file.close()
您的错误只是您认为int(line)
会给您行号。实际所做的是尝试将每行的文本解释为整数,这不是您想要的。
现在,Python 的许多优点在于其庞大的有用函数库。上述方法有效,但没有充分利用该语言所提供的功能。我要更改的第一件事是使用enumerate
而不是显式计数器,我要更改的第二件事是使用write
files 的方法而不是print
,我要更改的第三件事是利用“非零为真”规则:
my_file = open("thisFile.txt", "r")
out_file = open("thatFile.txt", "w")
for i, line in enumerate(my_file, start=1):
if i % 2:
out_file.write(line)
my_file.close()
out_file.close()
我说这行得通,但实际上它只有在出现问题时才有效。如果有任何东西引发异常(例如,如果发生 I/O 错误),则文件对象不会关闭。1该with
语句告诉 Python 确保文件被关闭,无论是否发生异常;这也方便地减少打字。
with open("thisFile.txt", "r") as my_file,
open("thatFile.txt", "w") as out_file:
for i, line in enumerate(my_file, start=1):
if i % 2:
out_file.write(line)
您可能会注意到这与 Lattyware 的回答相同。(乔恩克莱门特的回答可能有点太聪明了;他似乎在打高尔夫球。)
1在这段简单的代码中,如果发生异常,CPython 的垃圾收集器会注意到文件对象不再可访问,并将为您关闭它们,但随着您的程序变得更加复杂,这不是可以依赖的东西。