这个问题的确切问题是: *创建一个包含20行文本的文件,并将其命名为“lines.txt”。编写一个程序来读取这个文件“lines.txt”并将文本写入一个新文件“numbered_lines.txt”,该文件在每行的开头也有行号。 例: 输入文件:“lines.txt”
Line one
Line two
预期的输出文件:
1 Line one
2 Line two
我被困住了,这就是我到目前为止所拥有的。我是Python的真正初学者,我的导师并没有说清楚。批评和帮助非常赞赏。
file_object=open("lines.txt",'r')
for ln in file_object:
print(ln)
count=1
file_input=open("numbered_lines.txt",'w')
for Line in file_object:
print(count,' Line',(str))
count=+1
file_object.close
file_input.close
我得到的所有输出是我创建的.txt文件,说明第1-20行。我很困难,老老实实地对我正在做的事情一无所知。谢谢
答案 0 :(得分:1)
你拥有所有正确的部分,而且你几乎就在那里:
当你这样做时
for ln in file_object:
print(ln)
您已经耗尽了该文件的内容,而您又无法再次阅读,就像您稍后尝试的那样。
此外,print
无法写入文件,您需要file_input.write(...)
这应解决所有问题:
infile = open("lines.txt", 'r')
outfile = open("numbered_lines.txt", 'w')
line_number = 1
for line in infile:
outfile.write(str(line_number) + " " + line)
infile.close()
outfile.close()
然而,这是一种更加诡计多端的方式:
with open("lines.txt") as infile, open("numbered_lines.txt", 'w') as outfile:
for i, line in enumerate(infile, 1):
outfile.write("{} {}".format(i, line))
答案 1 :(得分:0)
打开文件的正确方法是使用with
语句:
with open("lines.txt",'r') as file_object:
... # do something
这样,with
引入的上下文管理器将在""结束时关闭您的文件。或者在例外的情况下。
当然,如果您不熟悉该文件,可以自行关闭该文件。不是close
是一种方法:要调用它你需要括号:
file_object.close()
见第7.2章。 Reading and Writing Files,在官方文件中。
答案 2 :(得分:0)
在第一个循环中,您将打印输入文件的内容。这意味着当您到达第二个循环时已经消耗了文件内容。 (另外,作业并没有要求您打印文件内容。)
在第二个循环中,您使用print()
而不是写入文件。试试file_input.write(str(count) + " " + Line)
(并且file_input
对于您将正在撰写的文件来说似乎是一个坏名称。)
count=+1
将计数设为+1
,即正数。我认为你的意思是count += 1
。
在计划结束时,您拨打.close
而不是.close()
。括号很重要!
答案 3 :(得分:0)
首先尝试好,然后我可以通过你的代码解释你做对了什么(或错了)
file_object=open("lines.txt",'r')
for ln in file_object:
print(ln)
这很好,虽然通常你想在赋值之前和之后放置一个空格(你在分隔参数时将open
的结果分配给file_object) and add a space after a
,所以你可能想写一下像这样:
file_object = open("lines.txt", 'r')
for ln in file_object:
print(ln)
但是,此时file_object
中的内部引用已到达文件的末尾,因此如果您希望重用相同的对象,则需要seek
回到起始位置,这是0
。因为你的作业只写入文件(而不是屏幕上),所以应该从文件中省略上面的循环(但我得到了你想要做的事情,你想立即看到文件的内容,尽管有时教师是他们接受的东西非常严格。继续:
count=1
file_input=open("numbered_lines.txt",'w')
for Line in file_object:
到目前为止看起来非常正常,再次出现轻微的格式问题。在Python中,通常我们将所有变量命名为小写,因为带有大写的名称通常是为类名保留的(如果您愿意,可以read about them)。现在我们进入你得到的循环
print(count,' Line',(str))
这打印不完全你想要的。因为' Line'
被包含在引号中,所以它被视为字符串文字 - 因此它被视为文本而不是代码。鉴于您已分配Line
,您想要取出引号。最后的(str)
只是打印出字符串对象,它肯定不是你想要的。此外,您忘记指定要打印到的file
。默认情况下,它将打印到屏幕,但您要将其打印到已打开并分配给numbered_lines.txt
的{{1}}文件。我们稍后会更正。
file_input
如果您采用不同的格式,则可以将 count=+1
分配给+1
。我猜您想使用count
运算符来递增它。在你的测验/考试中记住这一点。
最后:
+=
它们被称为函数,你需要通过在末尾用参数添加括号来调用它们,但是当file_object.close
file_input.close
不带参数时,括号内没有任何内容。将所有内容放在一起,程序的完整更正代码应如下所示
close
运行程序。您会注意到每行文本之间都有一个额外的空行。这是因为默认情况下print
函数会添加一个新行file_object = open("lines.txt", 'r')
count = 1
file_input = open("numbered_lines.txt", 'w')
for line in file_object:
print(count, line, file=file_input)
count += 1
file_object.close()
file_input.close()
字符;你从文件中得到的那一行最后包含一个换行符(这是什么使它们成行,对吧?)所以我们不必在这里添加我们自己的行。您当然可以将其更改为空字符串。那条线看起来像这样。
end
当然,其他Python程序员会告诉你有Pythonic的方法,但你刚刚开始,不要太担心它们(尽管你以后肯定可以接受它,我强烈建议你!)