2013-03-18 68 views
1

感謝您對我可能愚蠢的問題的興趣。只在文本文件的第一行替換某個元素

我有一個文本文件,並想更換某些元素是「南」。

我平時都用於改變NaN的file.replace功能通過整個文本文件一定數量。
現在,我想用文本文件的第一行中的某個數字替換NaN,而不是整個文本。
你能給我一個這個問題的提示嗎?

+2

沒有'file.replace'函數。 YOu應該發佈您的嘗試代碼,以便我們可以指出您的代碼出了什麼問題。根據我對你的問題的理解,我建議使用'myFile = open('path/to/file'); firstLine = myFile.readline(); newFirstLine = firstLine.replace('oldValue','newValue'); (myFile.readlines(); myFile.close(); myFile = open('path/to/file','w'); myFile.write(newFirstLine + rest); myFile.close() ' – inspectorG4dget 2013-03-18 02:47:43

+0

@ inspectorG4dget - 。該意見的下半場看起來像一個答案,我 – 2013-03-18 03:05:10

+0

非常感謝您inspectorG4dget,你的回答也似乎bewhat我找我會讓你知道我試過後 – Isaac 2013-03-18 03:09:05

回答

5

只能讀取整個文件,調用.replace()的第一行,並將其寫入新文件。

with open('in.txt') as fin: 
    lines = fin.readlines() 
lines[0] = lines[0].replace('old_value', 'new_value') 

with open('out.txt', 'w') as fout: 
    for line in lines: 
     fout.write(line) 

如果你的文件是不是真的很大,你可以只使用。加入():

with open('out.txt', 'w') as fout: 
    fout.write(''.join(lines)) 

而如果是真大,你可能會更好的同時讀寫線。

+0

艾薩克·威力*能夠避免重寫整個文件。見我對細節的答案。 – 2013-03-18 03:38:52

+0

@StevenRumbalski您的解決方案是隻爲等長的字符串OK,他們在這裏肯定不是。 – gukoff 2013-03-18 03:55:58

2

可以破解這個前提是你接受一些限制。替換字符串需要與原始字符串的長度相同。如果替換字符串比原始字符串短,請用較短的字符串填充空格以使其長度相等(只有在數據中有多餘空格纔可接受時纔可用)。如果替換字符串比原始字符長,則無法進行替換,需要遵循Harold的答案。

with open('your_file.txt', 'rw') as f: 
    line = next(f) # grab first line 
    old = 'NaN' 
    new = '0 ' # padded with spaces to make same length as old 
    f.seek(0) # move file pointer to beginning of file 
    f.write(line.replace(old, new)) 

這將在任何長度的文件上很快。