2013-03-22 100 views
-3

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

因此,例如,

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

什么是“正确的格式”?你有什么要求?你到目前为止尝试了什么? – glglgl 2013-03-22 08:36:14

+0

列表的内容是什么?您是否需要稍后从文件中恢复Python中的列表? – 2013-03-22 08:36:59

+0

os.system(“cat file1 file2> file3”) – Paul 2013-03-22 08:40:30

回答

1

因为new_list显然是一行行列表,而不是文件名,所以您不需要所有的东西和 ing和read。而且你也不能保存在一个单一的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)。只需将其打印出来供用户查看,它就不会存储任何内容供以后使用。

你想是这样的:

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) 
+0

我似乎很容易得到这个错误 TypeError:'NoneType'对象是不可迭代的。已经尝试过你建议的每种方法,但现在仍在工作。尽管非常感谢你。 – 2013-03-22 22:43:11

+0

@EdenMaynard:那是因为,正如我在底部所说的,你也没有'load_file'。它应该返回一行(或_something_)列表,但它不会,它只是打印出这些行并返回'None'。您无法将其保存到文件,因为您没有任何要保存到文件的内容。 – abarnert 2013-03-22 23:05:12

+0

我已经使用load_file的第一个代码。当我尝试使用save_file时,原始文件会删除所有内容,并收到错误消息:filename.write('\ n'.join(new_list)+'\ n') AttributeError:'str'object has no attribute'写' – 2013-03-22 23:20:07

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的答案。

+0

我试过这个和SaltChicken's并且不断收到这个错误:open(new_list,'r')为f1: TypeError:强制为Unicode:需要字符串或缓冲区,找到NoneType – 2013-03-22 22:29:37

+0

由于这只是对SaltChicken的答案的一个小调整,它也有同样的问题。 'new_list'是行的列表,而不是文件名。 – abarnert 2013-03-22 22:35:25

+0

@abarnert new_list只是另一个带有新列表的文件。 – 2013-03-22 23:02:32