2012-10-31 457 views
0

我試圖從文件中刪除所有(非空格)空格字符並用逗號替換所有空格。這裏是我當前的代碼:如何使用python正確讀取和修改文件

def file_get_contents(filename): 
    with open(filename) as f: 
    return f.read() 

content = file_get_contents('file.txt') 
content = content.split 
content = str(content).replace(' ',',') 
with open ('file.txt', 'w') as f: 
    f.write(content) 
時,這是運行

,它取代了文件的內容有:

<built-in,method,split,of,str,object,at,0x100894200> 

回答

2

你的主要問題是,你分配方法content.split內容,而不是調用它,並賦予它的返回值。如果在作業完成後打印出content,那將是:<built-in method split of str object at 0x100894200>這不是您想要的。通過添加括號修復它,使它的方法的調用,而不是僅僅把它的引用:

content = content.split() 

我想你可能仍然有一個問題固定,通過之後。 str.split返回一個列表,然後使用str(在嘗試用逗號替換空格之前)調回到一個字符串中。這將給你方括號和引號,你可能不想要,你會得到一堆額外的逗號。相反,我建議使用str.join方法是這樣的:

content = ",".join(content) # joins all members of the list with commas 

我不能完全肯定,如果這是你想要什麼,雖然。使用split將替換文件中的所有換行符,因此您將最終得到一行代碼,其中包含許多由逗號分隔的單詞。

+0

內容是要在數組中使用的所有整數值。 –

0

當你分割的內容,你忘了打電話的功能。同樣,一旦你分裂,它的一個數組,所以你應該循環取代的東西。

def file_get_contents(filename): 
    with open(filename) as f: 
    return f.read() 

content = file_get_contents('file.txt') 
content = content.split() <- HERE 
content = [c.replace(' ',',') for c in content] 
content = "".join(content) 
with open ('file.txt', 'w') as f: 
    f.write(content) 
+1

「split」之後沒有'沒有任何空間可用,所以'替換'調用是毫無意義的。 – Blckknght

+0

好點。只需遵循答案中的代碼即可。我假設意圖可能是做一些實際的替換。 – miki725

0

如果你正在尋找替換字符,我認爲你會更好地使用Python的re模塊正則表達式。示例代碼如下:

import re 

def file_get_contents(filename): 
    with open(filename) as f: 
    return f.read() 

if __name__=='__main__': 
    content = file_get_contents('file.txt') 
    # First replace any spaces with commas, then remove any other whitespace 
    new_content = re.sub('\s', '', re.sub(' ', ',', content)) 
    with open ('new_file.txt', 'w') as f: 
     f.write(new_content) 

它更簡潔,然後試圖分裂所有的時間,給你一點靈活性。你也可以考慮使用一個行迭代器或其他東西,而不是一次讀取所有的文件內容