-3

我必须定义一个函数:save_file(filename, new_list)它接受一个文件名和一个新列表,并以正确的格式将该列表写入文件。

所以,例如,

save_file(’file.txt’, load_file(’file.txt’))

load_file是打开和读取文件的预定义函数)

应该用完全相同的内容覆盖新列表。

我不知道该怎么做,有什么想法吗?

load_file 函数似乎可以工作,但似乎无法使 save_file 函数正常工作。

这是我到目前为止所拥有的:

到目前为止我有这个:

def load_file(filename):
f = open(filename, 'Ur')
 for line in f:
    print line

f.close()

def save_file(filename, new_list):
with open(new_list, 'Ur') as f1:
    with open(filename, 'w') as f2:
        f2.write(f1.read())
4

3 回答 3

1

由于new_list显然是行列表,而不是文件名,因此您不需要opening 和reading 它的所有内容。而且您也不能保存在单个write.

但你几乎可以这么简单地做到这一点。

您没有指定其中的行是否new_list仍有换行符。让我们首先假设他们这样做。所以,你所要做的就是:

def save_file(filename, new_list):
    with open(filename, 'w') as f:
        f.write(''.join(new_list))

… 或者 …:

def save_file(filename, new_list):
    with open(filename, 'w') as f:
        f.writelines(new_list)

但是你的老师可能期待这样的事情:

def save_file(filename, new_list):
    with open(filename, 'w') as f:
        for line in new_list:
            f.write(line)

如果换行符被去掉了,所以我们必须把它们加回来怎么办?那么前两种方法有点复杂,但第三种方法仍然很容易:

def save_file(filename, new_list):
    with open(filename, 'w') as f:
        f.write('\n'.join(new_list) + '\n')

def save_file(filename, new_list):
    with open(filename, 'w') as f:
        f.writelines(line + '\n' for line in new_list)

def save_file(filename, new_list):
    with open(filename, 'w') as f:
        for line in new_list:
            f.write(line + '\n')

与此同时,你还没有开始load_file工作。它应该返回一个行列表,但它不返回任何东西(或者,更确切地说,它返回None)。printing 有些东西只是打印出来供用户查看,它不存储任何东西以供以后使用。

你想要这样的东西:

def load_file(filename):
    lines = []
    with open(filename, 'Ur') as f:
        for line in f:
            lines.append(line)
    return lines

但是,有一种更简单的方法来编写它。如果你能做到for line in f:,那么f就是某种可迭代的。它与列表几乎是一样的——如果你想把它变成一个实际的列表,那很简单:

def load_file(filename):
    with open(filename, 'Ur') as f:
        return list(f)
于 2013-03-22T22:29:28.203 回答
0
def save_file(filename, new_list):
    with open(new_list, 'r') as a:
        with open(filename, 'w') as b:
            b.write(a.read())

只是对 SaltChicken 的回答稍作调整。

于 2013-03-22T09:15:16.280 回答
0

使用print >>使其简单:

>>> with open('/src/file', 'r') as f1, open('/dst/file', 'w') as f2:
...      print >> f2, f1.read()

灵感来自此代码的含义:“print >> sys.stderr”

于 2013-03-22T09:16:25.740 回答