我应该如何格式化我的文件?

2024-10-01 09:33:11 发布

您现在位置:Python中文网/ 问答频道 /正文

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)

我知道我需要格式化我的作品,但如何


Tags: inforlineopenitemdatwritestrip
2条回答

看起来你想写一个CSV文件。为此,您可以使用CSV模块或在如下值之间放置逗号:

f.write(",".join(map(str([s1, item, 1, list1[item-1], er2]))))

这将使您试图写入的所有值成为一个数组,然后在每个项之间放入“,”。它还将该数组的每个项转换为字符串,因为join希望每个元素都是字符串

您正在将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))

相关问题 更多 >