2013-06-11 5 views
1
out_file = open('result.txt', 'w') 
A = [1,2,3,4,5,6,7,8,9,10] 
B = [11,12,13,14,15] 
for a in A: 
    for b in B: 
     result = a + b 
     print (result, file = out_file) 
out_file.close() 

Вышеупомянутая программа записывает один файл (result.txt), состоящий из всех результатов (50 элементов) вместе.Запись нескольких файлов из цикла

Я хочу написать десять из файлов каждый из которых состоит из 5 элементов и назван следующим образом:

1.txt

2.txt

...

10.txt

Файл 1.txt помещает сумму 1 + 11, 1 + 12, 1 + 13, 1 + 14 и 1 + 15.

Файл 2.txt помещает сумму 2 + 11, 2 + 12, 2 + 13, 2 + 14 и 2 + 15.

.....

Файл 10.txt поставит сумму 10 + 11, 10 + 12, 10 + 13, 10 + 14 и 10 + 15.

Любая помощь, пожалуйста. Ожидается очень простая программа.

Опять же, когда я хотел назвать файл out с помощью элементов N, почему я не смог?

A = [1,2,3,4,5,6,7,8,9,10] 
B = [11,12,13,14,15] 
N = ['a','b','c','d','e','f','g','h','i','j'] 
for a in A: 
    results = [] 
    for b in B: 
     result = a + b 
     results.append(result) 
     for n in N: 
      with open('{}.txt'.format(n),'w') as f: 
       for res in results: 
        f.write(str(res)+'\n') 
+0

если это домашнее задание, а не реальный мир прецедентов (что может быть полезным для кого-то еще, кроме вас), вы должны в наименьшая отметка. Thnx –

+0

Вместо имен, таких как 1.txt, 2.txt на этот раз вы хотите a.txt, b.txt и т. Д., Но тот же контент в файлах? –

+0

есть, такой же содержание как раньше – lisa

ответ

2
A = [1,2,3,4,5,6,7,8,9,10] 
B = [11,12,13,14,15] 
for a in A: 
    results = []   # define new list for each item in A 
    #loop over B and collect the result in a list(results) 
    for b in B: 
     result = a + b 
     results.append(result) #append the result to results 
    #print results    # uncomment this line to see the content of results 
    filename = '{}.txt'.format(a)  #generate file name, based on value of `a` 
    #always open file using `with` statement as it automatically closes the file for you 
    with open(filename , 'w') as f: 
     #now loop over results and write them to the file 
     for res in results: 
      #we can only write a string to a file, so convert numbers to string using `str()` 
      f.write(str(res)+'\n') #'\n' adds a new line 

Update:

Вы можете использовать zip() здесь. zip возвращают элементы по одному и тому же индексу из переданных ему последовательностей.

A = [1,2,3,4,5,6,7,8,9,10] 
B = [11,12,13,14,15] 
N = ['a','b','c','d','e','f','g','h','i','j'] 
for a,name in zip(A,N): 
    results = [] 
    for b in B: 
     result = a + b 
     results.append(result) 
    filename = '{}.txt'.format(name) 
    with open(filename , 'w') as f: 
     for res in results: 
      f.write(str(res)+'\n') 

Помощь в zip:

>>> print zip.__doc__ 
zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)] 

Return a list of tuples, where each tuple contains the i-th element 
from each of the argument sequences. The returned list is truncated 
in length to the length of the shortest argument sequence. 
+0

@ Ashwini Chaudhary спасибо за быстрый ответ. я принял ваш ответ, потому что он обеспечил результат, который я искал. к сожалению, я не мог понять. не могли бы вы научить меня медленно и просто. – lisa

+0

@lisa Я добавил несколько объяснений, дайте мне знать, какую часть вы не поняли. –

+0

спасибо. я не поймал, где вы разделили результаты на десять частей. – lisa

1
A = [1,2,3,4,5,6,7,8,9,10] 
B = [11,12,13,14,15] 
for a in A: 
    with open(str(a) + '.txt', 'w') as fout: 
     fout.write('\n'.join(str(a + b) for b in B) 
+0

@AshwiniChaudhary, да я сделал: / –

0
A = range(1, 10 + 1) 
B = range(11, 15 + 1) 

for a in A: 
    with open('{}.txt'.format(a), 'wb') as fd: 
     for b in B: 
      result = a + b 
      fd.write('{}\n'.format(result)) 
Смежные вопросы