python的文件和例外

时间:2013-10-24 23:58:51

标签: python python-3.x

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

4 个答案:

答案 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)