<p>您正在将6项传递给<code>write()</code>函数。此外,您不能在需要将文件对象转换为字符串的文件对象上编写列表。或者在本例中,您可以使用<code>str.join()</code>将它们连接起来,然后将其写入文件</p>
<pre><code>f.write(','.join(map(str,( s1,item,1,list1[item-1],er2)))
</code></pre>
<p>另外请注意,您不应该打开这样的文件。因为外部对象曾经被创建过<a href="https://docs.python.org/3/reference/datamodel.html#objects-values-and-types" rel="nofollow">won't be collected by garbage collector</a>。您可以简单地使用<code>with</code>语句来打开文件,从而在块的末尾自动关闭文件</p>
<pre><code>with open("m1.dat") as f:
ii1 = [int(x.strip()) for x in f]
s1 = 1
er1 = 0.022
er2 = 2.866
w = [1,2,5,6]
with open('newdat.txt','w') as f:
for item in ii1:
for i in w:
if i % 2 != 0:
f.write(','.join(map(str, (s1, item, i, list1[item-1], er2)))
else:
f.write(','.join(map(str, (s1, item, i, list1[item-1], er1)))
</code></pre>
<p>另外,作为另一种替代方法(更具pythonic),对于拒绝加入项并转换为字符串,您可以使用<code>csv</code>模块并将预期的序列写入<code>csv</code>文件</p>
<pre><code>import csv
# ...
# ...
with open('newdat.csv', 'w') as csvfile:
spampwriter = csv.writer(csvfile, delimiter=',')
for item in ii1:
for i in w:
if i % 2 != 0:
spampwriter.writerrow((s1, item, i, list1[item-1], er2))
else:
spampwriter.writerrow((s1, item, i, list1[item-1], er1))
</code></pre>