<p>您可以使用dict索引新数据。然后将原始文件写入一个新文件,逐行更新索引中的数据。看起来前三项应该是键(“prod85030003”),它们可以用<code>(PROD\s+\d+\s+\d+)</code>这样的正则表达式取出。你知道吗</p>
<pre><code>import re
_split_new = re.compile(r"(PROD\s+\d+\s+\d+)(.*)")
# create an index for the PROD items to be updated
# this might be a bit more understandable...
#with open('updates.txt') as updates:
# new_data = {}
# for line in updates:
# match = _split_new.match(line)
# if match:
# key, value = match.groups()
# new_data[key] = value
# ... but this is fancier (and likely faster)
with open('updates.txt') as updates:
new_data = dict(match.groups()
for match in (_split_new.search(line) for line in updates)
if match)
# then process the updates
with open('origstuff.txt') as orig, open('newstuff.txt', 'w') as newstuff:
# for each line in the original...
for line in orig:
match = _split_new.match(line)
# ... see if its a PROD line
if match:
key, value = match.groups()
# ... and rewrite with value from indexing dict (defaulting to current value)
newstuff.write("%s%s\n" % (key, new_data.get(key, value)))
else:
# ... or just the original line
newstuff.write(line)
</code></pre>