在Python 3.5中编写一个读取文件的程序,然后使用与第一个文件相同的文本写入不同的文件以及更多文件?

时间:2016-09-19 04:26:37

标签: python file

这个问题的确切问题是: *创建一个包含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行。我很困难,老老实实地对我正在做的事情一无所知。谢谢

4 个答案:

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

  1. 在第一个循环中,您将打印输入文件的内容。这意味着当您到达第二个循环时已经消耗了文件内容。 (另外,作业并没有要求您打印文件内容。)

  2. 在第二个循环中,您使用print()而不是写入文件。试试file_input.write(str(count) + " " + Line)(并且file_input对于您将正在撰写的文件来说似乎是一个坏名称。)

  3. count=+1将计数设为+1,即正数。我认为你的意思是count += 1

  4. 在计划结束时,您拨打.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的方法,但你刚刚开始,不要太担心它们(尽管你以后肯定可以接受它,我强烈建议你!)