2013-03-22 115 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

相關問題