2014-03-02 126 views
0

所以這段代碼是爲了從文件中取出一行並用新的單詞/數字替換字符串中的某一行,但它似乎不起作用:(替換文件中的文本,Python

else: 
    with open('newfile', 'r+')as myfile: 
      x=input("what would you like to change: \nname \ncolour \nnumber \nenter option:") 
      if x == "name": 
       print("your current name is:") 
       test_lines = myfile.readlines() 
       print(test_lines[0]) 
       y=input("change name to:") 
       content = (y) 
       myfile.write(str.replace((test_lines[0]), str(content))) 

我得到錯誤信息類型錯誤:更換()至少需要2個參數(1給出),我不知道爲什麼(內容)不被接受作爲參數也會發生這種情況下面

的代碼。
if x == "number": 
      print ("your current fav. number is:") 
      test_lines = myfile.readlines() 
      print(test_lines[2]) 
      number=(int(input("times fav number by a number to get your new number \ne.g 5*2 = 10 \nnew number:"))) 
      result = (int(test_lines[2])*(number)) 
      print (result) 
      myfile.write(str.replace((test_lines[2]), str(result))) 





f=open('newfile', 'r') 
print("now we will print the file:") 
for line in f: 
    print (line) 
f.close 

回答

0

替換爲 'STR' 對象的功能。

聽起來像是你想要做這樣的事情(這是不是知道你輸入的猜測)

test_lines[0].replace(test_lines[0],str(content)) 

我不知道你試圖用邏輯來實現在那裏。看起來像要完全刪除該行並將其替換?

還我不能確定你正在嘗試與

content = (y) 

做輸入輸出是STR(這是你想要的)

編輯:

在你的具體情況(更換一整行),我會建議只是在列表中重新分配該項目。例如

test_lines[0] = content 

要覆蓋文件,您將不得不截斷它以避免任何競爭條件。所以一旦你對記憶做出了改變,你應該尋找開始,並重寫所有的東西。

# Your logic for replacing the line or desired changes 
myfile.seek(0) 
for l in test_lines: 
    myfile.write("%s\n" % l) 
myfile.truncate() 
+0

其實我想他想用test_lines替換test_lines中的第一個字符,所以:'test_lines.replace(test_lines [0],str(content))''。但我可能是錯的。 – Guy

+0

readlines()返回一個文件的所有行的列表 – jbh

+0

是的,我剛剛注意到。我的錯。 – Guy

0

試試這個:

test_lines = myfile.readlines() 
print(test_lines[0]) 
y = input("change name to:") 
content = str(y) 
myfile.write(test_lines[0].replace(test_lines[0], content)) 

你沒有純粹稱爲str對象。必須在字符串對象上調用方法replace()。你可以在test_lines[0]上調用它來引用一個字符串對象。

但是,您可能需要更改實際的程序流程。但是,這應該規避錯誤。

0

你需要調用它作爲test_lines[0].replace(test_lines[0],str(content))

調用help(str.replace)的解釋。

replace(...) S.replace(old, new[, count]) -> str

Return a copy of S with all occurrences of substring old replaced by new. If the optional argument count is given, only the first count occurrences are replaced.

找不到文檔。