<p>重写文本文件是有问题的,因为它们通常有可变长度的记录,但是您的记录是固定长度的,因此:</p>
<pre><code>fh = open('gash.txt','r+')
# read the first line
line = fh.readline()
row = line.split(' - ')
fourthValue = row[3]
newFourthValue = '4'
newLine = line.replace(fourthValue, newFourthValue)
</code></pre>
<p>此时,“当前文件位置”位于<strong>下一行的开头,因此我们必须将其移回当前记录的开头</p>
<pre><code>fh.seek(0)
fh.write(newLine)
fh.close()
</code></pre>
<p>这太简单了。问题是第一行。如果它在其他任何地方,我们必须使用<code>fh.tell()</code>记住每行之前的文件位置,然后在<code>fh.seek()</code>中使用该数字。你知道吗</p>
<p>编辑:
在回答“如果我想替换第4行中的值而不是第一行中的值”的问题时,这将用第4行中的8替换4。你知道吗</p>
<pre><code>lineToChange = 4
fieldToChange = 3
newValue = '8'
sep = ' - '
lineno = 0
fh = open('gash.txt','r+')
while True:
# Get the current file position
start_pos = fh.tell()
# read the next line
line = fh.readline()
if not line: break # exit the loop at EOF
lineno += 1
if lineno == lineToChange:
row = line.split(sep)
# A different replace mechanism
row[fieldToChange] = newValue
newLine = sep.join(row)
# before writing, we must move the file position
fh.seek(start_pos)
fh.write(newLine)
fh.close()
</code></pre>
<p><strong>请注意</strong>这仅适用于将单个字符替换为另一个单个字符的情况。如果我们想用10替换8,那么这就行不通了,因为现在行长不同了,我们会覆盖下一行的开头。你知道吗</p>