python的文件和异常
所以我一直在写这段代码,从另一个文件中打印出几行文本。我只是做了一个包含4行文本的文件,并在列出的行之前创建了一个print语句来指示它是哪一行。如何修改代码,使其在没有文本时不打印第五行指示器 这是它的打印方式:python的文件和异常,python,python-3.x,Python,Python 3.x,所以我一直在写这段代码,从另一个文件中打印出几行文本。我只是做了一个包含4行文本的文件,并在列出的行之前创建了一个print语句来指示它是哪一行。如何修改代码,使其在没有文本时不打印第五行指示器 这是它的打印方式: a = 1 inPut = input("Please enter a file name: ") infile = open(inPut, "r") line = infile.readline() print("/*", a ,"*/", line) while line !=
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()
我希望将其打印为:
/* 1 */ Hello
/* 2 */ My name
/* 3 */ is
/* 4 */ John
/* 5 */
您可以在读取输入后中断循环
/* 1 */ Hello
/* 2 */ My name
/* 3 */ is
/* 4 */ John
在我看来,您的问题更适合使用for循环而不是while循环。大概是这样的:
for a, line in enumerate(infile, 1):
print("/*", a, "*/", line)
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
- 使用
获取行号(替换计数器变量)枚举
- 更具描述性的变量名
- 如果行的条件是空字符串为false,则非空字符串为true李>
for a, line in enumerate(infile, 1):
print("/*", a, "*/", line)
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)
在本例中,我将变量“a”的名称更改为“index”
另一个技巧是使用(Python 2.5中新增的)在完成文件句柄时自动关闭它:
inPut = input("Please enter a file name: ")
infile = open(inPut, "r")
for index, line in enumerate(infile.readlines()):
print("/*", index, "/*", line)
infile.close()
你能解释一下break语句是如何工作的吗?我还没有谈到这个术语。谢谢它只是终止循环。只要你第一次“中断”并转到循环后的任何地方,就可以摆脱它。@F.J的答案更好,不过就你应该采取的一般方法而言。根本不需要调用
.readlines()
;文件对象是可编辑的。那不打印/*0*/Hello
?枚举()的第二个参数是可选的,它是默认为0
的起始索引,我在这里使用1
。