Python .csv écrivain
- Je utiliser un .writer()
méthode dans une boucle, comme illustré dans la documentation Python.
Je veux écrire les résultats de la variable u
, ligne par ligne (ou mieux, ligne par ligne).
Effectivement, il fonctionne parfaitement dans l'interpréteur, mais le module writerow()
ne semble pas fonctionner. Pourquoi?
from urlparse import urlparse
import csv
import re
ifile =open(ipath,'r')
ofile = open(opath, 'wb')
writer = csv.writer(ofile, dialect='excel')
url =[urlparse(u).netloc for u in file (ipath, "r+b")]
sitesource = set([re.sub("www.", "", e) for e in url])
liste = [re.split(",'", e) for e in liste]
ofile
for row in file (ifile) :
for u in sitesource:
print ("Creation de:", u)
writer.writerow(u)
ofile.close()
J'utilise Python 2.7.
- L'interpréteur python jeter une erreur ou quel est le problème? BTW, vous avez l'impression de la valeur de la variable "u", mais vous êtes en train de rédiger la lettre "u" pour le csv. Est-ce que vous voulez?
- Pas d'erreur dans l'interpréteur. Je veux imprimer la valeur de la variable u. BTW le fichier ne semble pas être ouvert.
- Quel est le résultat que vous voyez ? Est ofile vide ? Mettre le fichier s'ouvre dans un essai,à l'exception du bloc et de voir si il n'y a aucune IOError levée lorsque vous essayez d'ouvrir les fichiers (ifile,ofile) . Si il n'y a pas de IOError , vérifier si est sitesource un vide ? imprimer son contenu et voir si elle a des valeurs.
- peut-être que vous n'écrivez pas le caractère de terminaison ? C'est de cette façon-je créer l'objet writer Writer = csv.writer(open(sys.argv[2], 'wb'), delimiter=',',quotechar='"', citant=csv.QUOTE_MINIMAL)
for row in file (ifile) :
est incorrect.ifile
est déjà ouvert, il devrait donc êtrefor row in ifile:
- Aussi, vous itérer sur chaque
row
, mais alors ne l'utilisez pas. Pourquoi? u
est une chaîne de caractères.writerow
s'attend à une séquence de chaînes de caractères.- Je ne vois pas de vous en utilisant
liste
après la cession. Peut-être que vous avez oublié de supprimer cette ligne à partir de votre exemple?
Vous devez vous connecter pour publier un commentaire.
Deviner à vous dire, je voudrais réécrire votre code comme suit:
J'ai supprimé
liste
comme il n'est pas utilisé. Je me suis débarrassé defor row in file (ifile):
comme vous l'avez déjà itéré de son contenu lors de la création deurl
.J'ai changé
à
parce que vous aviez déjà ouvert le fichier. Je suppose que vous ne voulez pas le mode binaire si vous êtes à la lecture des chaînes de caractères.
J'ai changé
writerow(u)
pour écrire une suite:writerow([u])
. Cela met un seulu
par ligne, ce qui signifie que votre fichier csv sera pas acutally avez des virgules dans il. Si vous voulait que tous vos résultats dans une seule ligne, remplacer la dernière boucle avec cette déclarationwriter.writerow(sitesource)
.writerow()
s'attend à une séquence d'argument, donc je pense que vous devez utiliserwriter.writerow([u])
depuis chaqueu
est une chaîne unique -- sinon, vous êtes le passant d'une séquence de caractères de faire de la même manière que vous avez actuellement il.Êtes-vous essayer d'écrire la chaîne de caractères "u"? ou le contenu de la variable ? Si c'est la dernière option, puis supprimer les parenthèses.
Pas tout à fait sûr, mais csv.de l'écrivain.writerow veut une séquence (je l'utilise toujours avec des listes) avec les champs de l'ensemble de la ligne, et vous êtes de parcourir un ensemble de ce qui renvoie ce que dans u?