2016-03-15 77 views
4
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) 

我明白,我需要格式化我寫,但怎麼樣?

+1

['join'](https://docs.python.org/3/library/stdtypes.html#str.join)them,'f.write(「,」。join(s1,item,1, list1 [item-1],er2))' –

+0

or python3 use print(s1,item,6,list,er,file = f,sep =',') – user234461

回答

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))) 

另外,作爲另一種可供選擇的方法(和更Python),用於接合物品的拒絕和轉換爲字符串可以使用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)) 
+0

我想要將數據寫入newline.How解決這個問題?我需要每行5個項目。 –

+0

@RichardRublev這就是代碼的作用。正如我提到的,如果你想保存你的物品而不加入,你可以使用'csv'。 – Kasramvd

0

它看起來像你試圖寫一個CSV文件。要做到這一點,您可以使用CSV模塊或將值之間的逗號是這樣的:

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

這將使所有你想寫入一個數組中的值,然後把「」在每個項目之間。它還將該數組中的每個項目轉換爲一個字符串,因爲join預計每個元素都是一個字符串。

相關問題