def generator():
nums = ['09', '98', '87', '76', '65', '54', '43']
s_chars = ['*', '&', '^', '%', '$', '#', '@',]
data = open("list.txt", "w")
for c in s_chars:
for n in nums:
data.write(c + n)
data.close()
Je voudrais ajouter une nouvelle ligne après chaque "c + n".
Changement
data.write(c + n)
à
data.write("%s%s\n" % (c, n))
Un data.write('\n')
correctement placé gérera cela. Il suffit de l'indenter de manière appropriée pour la boucle que vous voulez ponctuer.
Comme d'autres réponses l'ont déjà souligné, vous pouvez le faire en ajoutant un '\ n' à c+n
ou en utilisant la chaîne de formatage "% s% s\n".
À titre d’intérêt, je pense que ce serait plus pythonique d’utiliser une liste de compréhension au lieu de deux boucles imbriquées:
data.write("\n".join("%s%s"%(c,n) for c in s_chars for n in nums))
Changement
data.write(c+n)
à
data.write(c+n+'\n')
print
de Python est la fonction standard "print with newline".
Par conséquent, vous pouvez le faire directement si vous utilisez Python 2.x:
print >> data, c+n
Si vous utilisez Python 3.x:
print(c+n, file=data)
Pousser plus de travail vers la couche C avec writelines
et product
:
from future_builtins import map # Only do this on Python 2; makes map generator function
import itertools
def generator():
nums = ['09', '98', '87', '76', '65', '54', '43']
s_chars = ['*', '&', '^', '%', '$', '#', '@',]
# Append newlines up front, to avoid doing the work len(nums) * len(s_chars) times
# product will realize list from generator internally and discard values when done
nums_newlined = (n + "\n" for s in nums)
with open("list.txt", "w") as data:
data.writelines(map(''.join, itertools.product(s_chars, nums_newlined)))
Cela produit le même effet que la boucle imbriquée, mais avec les modifications intégrées implémentées en C (dans l’interpréteur de référence CPython de toute façon), en supprimant la surcharge d’exécution du code octet de l’image; cela peut améliorer considérablement les performances, en particulier pour les entrées plus volumineuses, et contrairement aux autres solutions impliquant '\n'.join
de la sortie entière dans une seule chaîne pour effectuer un seul appel write
, il est répété pendant son écriture, de sorte que l'utilisation de la mémoire reste fixe au lieu de vous obliger à réaliser. toute la sortie en mémoire en une seule fois dans une chaîne.
Celui-ci fonctionne pour moi
with open(fname,'wb') as f:
for row in var:
f.write(repr(row)+'\n')