[英]Replace Line with New Line in Python
我正在讀取文本文件並逐行搜索數據,基於某些條件,更改行中的某些值並將其寫回另一個文件。 新文件不應包含舊行。 我嘗試了以下,但它沒有奏效。 我想我錯過了一件非常基本的事情。
解決方案:在C ++中我們可以增加行但在Python中我不知道如何實現這一點。 到目前為止,我寫的是舊行而不是新行。 但在新文件中,我只想要新行。
例:
M0 38 A 19 40 DATA2 L=4e-08 W=3e-07 nf=1 m=1 $X=170 $Y=140 $D=8
M0 VBN A 19 40 TEMP2 L=4e-08 W=3e-07 nf=1 m=1 $X=170 $Y=140 $D=8
我嘗試的代碼如下:
def parsefile():
fp = open("File1", "rb+")
update_file = "File1" + "_update"
fp_latest = open(update_file, "wb+")
for line in fp:
if line.find("DATA1") == -1:
fp_latest.write(line)
if line.find("DATA1") != -1:
line = line.split()
pin_name = find_pin_order(line[1])
update_line = "DATA " + line[1] + " " + pin_name
fp_latest.write(update_line)
line = ''.join(line)
if line.find("DATA2") != -1:
line_data = line.split()
line_data[1] = "TEMP2"
line_data =' '.join(line_data)
fp_latest.write(line_data)
if line.find("DATA3") != -1:
line_data = line.split()
line_data[1] = "TEMP3"
line_data =' '.join(line_data)
fp_latest.write(line_data)
fp_latest.close()
fp.close()
當前代碼的主要問題是你的第一個if
塊檢查"DATA1"
,如果沒有找到則寫出行,當"DATA2"
或"DATA3"
存在時運行。 由於這些具有自己的塊,因此該行最終以兩種不同的形式復制。
這是你的循環的最小修改應該工作:
for line in fp:
if line.find("DATA1") != -1:
data = line.split()
pin_name = find_pin_order(data[1])
line = "DATA " + data[1] + " " + pin_name
if line.find("DATA2") != -1:
data = line.split()
data[1] = "TEMP2"
line =' '.join(data)
if line.find("DATA3") != -1:
data = line.split()
data[1] = "TEMP3"
line =' '.join(data)
fp_latest.write(line)
這確保只寫入一行,因為代碼中只有一個write()
調用。 特殊情況只是修改要寫入的行。 我不確定我是否理解您希望在這些情況下進行的修改,因此可能存在更多錯誤。
可能有用的一件事是將第二個和第三個if
語句改為elif
語句。 這將確保只運行其中一個(盡管如果您知道您的文件在一行上永遠不會有多個DATA
條目,則可能沒有必要)。
如果你想在一個文件中寫一個新行代替上次已經被重新加入的舊內容,你可以使用file.seek()方法來移動文件,有一個例子。
with open("myFile.txt", "r+") as f:
offset = 0
lines = f.readlines()
for oldLine in lines:
... calculate the new line value ...
f.seek(offset)
f.write(newLine)
offset += len(newLine)
f.seek(offset)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.