a = 1
inPut = input("Please enter a file name: ")
infile = open(inPut, "r")
line = infile.readline()
print("/*", a ,"*/", line)
while line !="" :
a = a + 1
line = infile.readline()
print("/*",a,"/*", line)
infile.close()
所以我一直在研究这个代码,用另一个文件打印出文本行。我只是做了一个包含4行文本的文件,并在列出的行之前创建了一个print语句来指示它是哪一行。我怎么能改变我的代码,以便在没有文本时不打印第5行指示符?
这就是它的印刷方式:
/* 1 */ Hello
/* 2 */ My name
/* 3 */ is
/* 4 */ John
/* 5 */
我希望将其打印为:
/* 1 */ Hello
/* 2 */ My name
/* 3 */ is
/* 4 */ John
答案 0 :(得分:1)
for a, line in enumerate(infile, 1):
print("/*", a, "*/", line)
答案 1 :(得分:1)
在我看来,你的问题更适合使用for循环而不是while循环。像这样:
input_filename = input("Please enter a file name: ")
with open(input_filename) as infile:
for (line_number, line) in enumerate(infile, 1):
if line:
print("/*",a,"/*", line)
注意事项的改进:
readlines
或类似的方法,您可以直接迭代它。 with
语句正确打开和关闭文件句柄enumerate
获取行号(替换您的计数器变量)if line
适用于空字符串为false,非空字符串为true的事实。 答案 2 :(得分:0)
阅读输入后,您可以跳出循环。
while True:
a = a + 1
line = infile.readline()
if line == "":
break
print("/*",a,"/*", line)
答案 3 :(得分:0)
您可以使用for循环,结合打开文件类对象的readlines()函数。此外,你应该使用枚举来枚举你读过的行,如下所示:
inPut = input("Please enter a file name: ")
infile = open(inPut, "r")
for index, line in enumerate(infile.readlines()):
print("/*", index, "/*", line)
infile.close()
在本例中,我将变量“a”的名称更改为名称“index”。
另一个提示是使用with statement(Python 2.5中的新增功能)在完成文件句柄后自动关闭文件句柄:
inPut = input("Please enter a file name: ")
with open(inPut, "r") as infile:
for index, line in enumerate(infile.readlines()):
print("/*", index, "/*", line)