为什么我的脚本将每个输入字符串写入输出文件两次?

时间:2016-06-09 18:34:10

标签: python python-2.7

当我看它写的东西时,它总是加倍。例如,如果我写'狗'病得到'狗狗'。为什么呢?

读取和写入文件,从命令行参数中获取文件名:

from sys import argv

script,text=argv

def reading(f):
    print f.read()

def writing(f):
    print f.write(line)

filename=open(text)
#opening file 

reading(filename)

filename.close()

filename=open(text,'w')

line=raw_input()

filename.write(line)

writing(filename) 

filename.close()

正如我所说,我得到的输出是我给出的输入的双倍值。

2 个答案:

答案 0 :(得分:1)

因为你写了两次,你获得了双倍的价值

1)从函数调用

def writing(f):
    print f.write(line)

2)使用filename.write(line)

写入文件

使用此代码:

from sys import argv

script,text=argv

def reading(f):
    print f.read()

def writing(f):
    print f.write(line)

filename=open(text,'w')

line=raw_input()

writing(filename) 

filename.close()

也不需要关闭文件两次,一旦完成所有的读写操作,就关闭它。

答案 1 :(得分:-1)

如果要显示每一行然后再写一个新行,您可能应该先读取整个文件,然后在编写新内容时循环遍历这些行。

这是你如何做到的。当您使用with open()时,您不必close()该文件,因为这是自动完成的。

from sys import argv
filename = argv[1]

# first read the file content
with open(filename, 'r') as fp:
    lines = fp.readlines()

# `lines` is now a list of strings.

# then open the file for writing. 
# This will empty the file so we can write from the start.
with open(filename, 'w') as fp:
    # by using enumerate, we can get the line numbers as well.
    for index, line in enumerate(lines, 1):
        print 'line %d of %d:\n%s' % (index, len(lines),  line.rstrip())
        new_line = raw_input()
        fp.write(new_line + '\n')