1
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 行文本的文件,并在列出的行之前创建了一个打印语句来指示它是哪一行。我如何更改我的代码,以便在没有文本时不打印第 5 行指示符?

这是它的打印方式:

/* 1 */ Hello
/* 2 */ My name 
/* 3 */ is 
/* 4 */ John
/* 5 */

我希望它被打印为:

/* 1 */ Hello
/* 2 */ My name 
/* 3 */ is 
/* 4 */ John
4

4 回答 4

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的作用是空字符串为假,非空字符串为真。
于 2013-10-25T00:03:51.137 回答
1
for a, line in enumerate(infile, 1):
    print("/*", a, "*/", line)
于 2013-10-25T00:01:48.653 回答
0

您可以使用 for 循环,结合打开的类文件对象的 readlines() 函数。此外,您可能应该使用 enumerate 来枚举您已阅读的行,如下所示:

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 语句(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)
于 2013-10-25T00:05:44.293 回答
0

阅读输入后,您可以跳出循环。

while True:
    a = a + 1
    line = infile.readline()
    if line == "":
        break
    print("/*",a,"/*", line)
于 2013-10-25T00:00:55.397 回答