mm1 = [line.strip() for line in open("m1.dat", 'r')]
ii1 = [int(x) for x in mm1]
s1 = 1
er1 = 0.022
er2 = 2.866
w = [1,2,5,6]
f=open('newdat.txt','w')
for item in ii1:
for i in w:
if i == 1:
f.write( s1,item,1,list1[item-1],er2)
elif i == 2:
f.write( s1,item,2,list2[item-1],er1)
elif i == 5:
f.write( s1,item,5,list3[item-1],er2)
else:
f.write( s1,item,6,list4[item-1],er1)
但我得到了
TypeError: function takes exactly 1 argument (5 given)
我明白我需要格式化我的写作但是如何?
答案 0 :(得分:2)
您正在将6项传递给write()
函数。此外,您无法在文件对象上编写列表,您需要将它们转换为字符串。或者在这种情况下,您可以使用str.join()
连接它们,然后将其写入文件。
f.write(','.join(map(str,( s1,item,1,list1[item-1],er2)))
另请注意,您不应该打开这样的文件。因为曾经创建了外部对象won't be collected by garbage collector。您只需使用with
语句即可打开将在块结束时自动关闭文件的文件。
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)))
另外作为另一种替代方法(更多pythonic),为了拒绝加入项目并转换为字符串,您可以使用csv
模块并将预期的序列写入csv
文件。
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))
答案 1 :(得分:0)
看起来您正在尝试编写CSV文件。为此,您可以使用CSV模块,也可以在值之间加上逗号:
f.write(",".join(map(str([s1, item, 1, list1[item-1], er2]))))
这将使您尝试写入数组的所有值,然后在每个项目之间放入“,”。它还将该数组的每个项转换为字符串,因为join
期望每个元素都是一个字符串。