在给定行号的文本文件中打印行
Posted
技术标签:
【中文标题】在给定行号的文本文件中打印行【英文标题】:Printing lines in a text file given line numbers 【发布时间】:2018-11-08 04:44:47 【问题描述】:对于以下问题,我在使用 while 循环语句时遇到问题。这是一个txt.file。
'编写一个程序,允许用户浏览任何文本文件中的文本行。程序提示用户输入文件名并将文件中的文本行复制到列表中。然后程序打印文件中的行数并提示用户输入行号。实际行号范围从 1 到文件中的行数。如果输入为 0,则程序退出。否则,程序将打印该行号中的文本。'
请看我的代码。
enterfile = input("Enter the file name: ")
file = open(enterfile, 'r')
linecount = 0
for line in file:
linecount = linecount + 1
print("The number of lines in this txt. file is", linecount)
linenum = 0
while True:
num = int(input("Please enter a line number or press 0 to quit: "))
if num >=1 and num <= linecount:
file = open(enterfile, 'r')
for lines in file:
linenum = linenum + 1
if linenum == num:
print(lines)
else:
if num == 0:
print("Thanks for using the program")
break
当我运行程序时,输入行号后行号不打印。
显然,我在这里没有正确使用 while 循环。有人可以告诉我我在这里做错了什么吗?我可以在这里使用 def 函数吗?
谢谢!
【问题讨论】:
你调试你的程序了吗? 您可以使用list_of_lines = list(file)
将文件读入列表。然后linecount = len(list_of_lines)
,您可以使用list_of_lines[num-1]
获取请求的行(记住列表从0开始)
@JeroenHeier 不,我没有。不知道该怎么做。我只是一个初学者。
您没有在运行之间重置 linenum。如果你想继续这样做,你应该在for
循环之前有linenum = 0
看看here。学习调试自己编写的代码非常重要。
【参考方案1】:
好像你在输入之后错过了作业的第一步
将文件中的文本行复制到列表中
有了这个,你就有了
with open(enterfile) as f:
lines = [line.rstrip() for line in f]
# continue on from here
现在,忘记你甚至有一个文件,你可以使用len(lines)
和lines[number-1]
分别获取总行数和特定行数
【讨论】:
【参考方案2】:在While True:
循环内移动linenum = 0
行。
当程序重新进入循环时,linenum
变量必须重置为 0 (linenum = 0
)。否则,linenum
变量将始终保持递增并具有大于 num
的值,并且永远不会触发 if 语句以打印该数字处的行。
您的代码在循环中带有linenum = 0
:
enterfile = input("Enter the file name: ")
file = open(enterfile, 'r')
linecount = 0
for line in file:
linecount = linecount + 1
print("The number of lines in this txt. file is", linecount)
while True:
linenum = 0
num = int(input("Please enter a line number or press 0 to quit: "))
if num >=1 and num <= linecount:
file = open(enterfile, 'r')
for lines in file:
linenum = linenum + 1
if linenum == num:
print(lines)
else:
if num == 0:
print("Thanks for using the program")
break
替代方法:
enterfile = input("Enter the file name: ")
with open(enterfile) as f:
lines = [line.rstrip() for line in f]
print("The number of lines in this txt. file is", len(lines))
while True:
num = int(input("Please enter a line number or press 0 to quit: "))
if num > 0 and num < len(lines) + 1:
print(lines[num - 1])
elif num == 0:
print('Thanks for using the program.')
break
【讨论】:
顺便说一句,linecount = sum(1 for _ in file)
是一种更短的方法
@empty:谢谢!我进行了编辑,它正在工作。但是,该程序似乎只打印输入的每个其他数字的行。
@cricket_007 感谢您的提示。我会在程序中试试这个。
@cricket_007 他提到他是 python 新手,所以我只是使用他的代码来帮助他理解他的错误。一个非常简单的解决方法是将他的 linenum = 0
变量初始化移动到他的 while 循环中。
@empty 也许是简单的修复,但对于所要求的内容来说似乎仍然有太多代码【参考方案3】:
使用 readlines() 函数返回一个包含行的列表,然后根据用户输入打印索引值。
file = input("Enter the file name: ")
text_file = open(file, "r")
lines = text_file.readlines()
print (len(lines))
while True:
linenumber = int(input("Please enter a line number or press 0 to quit: "))
if linenumber == 0:
print("Thanks for using the program")
break
elif 1 <= linenumber <= len(lines) :
print (lines[linenumber- 1])
else:
print("Please enter valid line number")
text_file.close()
【讨论】:
这将在列表中每行的末尾包含一个尾随换行符【参考方案4】:将linenum = 0
放在while 循环中,您的问题就解决了。
【讨论】:
【参考方案5】:抛光版:
enterfile = input("Enter the input file name: ")
file = open(enterfile, 'r')
linecount = 0
for line in file:
linecount = linecount + 1
print("The file has",linecount,"lines.")
while True:
linenum = 0
num = int(input("Enter a line number [0 to quit]: "))
if num >=1 and num <= linecount:
file = open(enterfile, 'r')
for lines in file:
linenum = linenum + 1
if linenum == num:
print(num,":",lines)
elif num == 0:
break
else:
if num!= linecount:
print("ERROR: line number must be less than",linecount)
【讨论】:
以上是关于在给定行号的文本文件中打印行的主要内容,如果未能解决你的问题,请参考以下文章