<p>当您调用<code>s.replace (stocklevel ,newlevel)</code>时,<code>stocklevel</code>的所有发生都将替换为<code>newlevel</code>的值。</p>
<blockquote>
<p><strong>string.replace(s, old, new[, maxreplace]):</strong> Return a copy of string s
with all occurrences of substring old replaced by new. If the optional
argument maxreplace is given, the first maxreplace occurrences are
replaced.</p>
</blockquote>
<p><a href="https://docs.python.org/2/library/string.html" rel="nofollow">source</a></p>
<p>正如您所建议的,您需要获得<code>code</code>,并使用它替换库存水平。</p>
<p>这是一个示例脚本,它以8位代码和新的stock level作为命令行参数并替换它:</p>
<pre><code>import sys
import re
code = sys.argv[1]
newval= int(sys.argv[2])
f=open("stockcontrol.csv")
data=f.readlines()
print data
for i,line in enumerate(data):
if re.search('%s,\d+'%code,line): # search for the line with 8-digit code
data[i] = '%s,%d\n'%(code,newval) # replace the stock value with new value in the same line
f.close()
f=open("in.csv","w")
f.write("".join(data))
print data
f.close()
</code></pre>
<p>使用Python的<a href="https://docs.python.org/2/library/csv.html" rel="nofollow">csv</a>模块的另一个解决方案:</p>
<pre><code>import sys
import csv
data=[]
code = sys.argv[1]
newval= int(sys.argv[2])
f=open("stockcontrol.csv")
reader=csv.DictReader(f,fieldnames=['code','level'])
for line in reader:
if line['code'] == code:
line['level']= newval
data.append('%s,%s'%(line['code'],line['level']))
f.close()
f=open("stockcontrol.csv","w")
f.write("\n".join(data))
f.close()
</code></pre>
<p><strong>警告:</strong>在尝试这些脚本覆盖输入文件时备份输入文件。</p>
<p>如果将脚本保存在名为<code>test.py</code>的文件中,则将其调用为:</p>
<p><code>python test.py 34512340 10</code>。</p>
<p>这将替换代码34512340到10的stockvalue。</p>