119 votes

Comment écrire dans un fichier CSV ligne par ligne?

J'ai des données qui sont accessibles via une requête http et renvoyées par le serveur dans un format séparé par des virgules, j'ai le code suivant :

site = 'www.example.com'
hdr = {'User-Agent': 'Mozilla/5.0'}
req = urllib2.Request(site,headers=hdr)
page = urllib2.urlopen(req)
soup = BeautifulSoup(page)
soup = soup.get_text()
text = str(soup)

Le contenu du texte est le suivant :

avril,2,5,7
mai,3,5,8
juin,4,7,3
juillet,5,6,9

Comment puis-je sauvegarder ces données dans un fichier CSV. Je sais que je peux faire quelque chose le long des lignes suivantes pour itérer ligne par ligne :

import StringIO
s = StringIO.StringIO(text)
for line in s:

Mais je ne suis pas sûr comment écrire correctement chaque ligne dans un CSV

EDIT---> Merci pour les commentaires comme suggéré la solution était plutôt simple et peut être vue ci-dessous.

Solution:

import StringIO
s = StringIO.StringIO(text)
with open('nomDuFichier.csv', 'w') as f:
    for line in s:
        f.write(line)

2 votes

C'est déjà un CSV, il vous suffit d'écrire chaque ligne dans un fichier...

2 votes

Je ne suis pas sûr que vous ayez même besoin de l'importation de StringIO, pour être honnête. De plus, la solution telle quelle ne sépare probablement pas les lignes, car f.write() n'ajoute pas automatiquement de sauts de ligne.

1 votes

@icedwater Je comprends ce que vous dites, mais j'ai exécuté le code ci-dessus et il a pu stocker correctement les données dans un fichier csv.

210voto

Ani Menon Points 5876

Manière générale :

##text=Liste des chaînes de caractères à écrire dans le fichier
with open('csvfile.csv','wb') as file:
    for line in text:
        file.write(line)
        file.write('\n')

OU

Utilisation du module CSV :

import csv
with open(, "wb") as csv_file:
        writer = csv.writer(csv_file, delimiter=',')
        for line in data:
            writer.writerow(line)

OU

Manière la plus simple :

f = open('csvfile.csv','w')
f.write('hi there\n') #Indiquez votre texte CSV ici.
## Python va convertir \n en os.linesep
f.close()

23 votes

Pour python 3, changez-le en with open(, "w", newline='') as csv_file:

3 votes

Il manque des informations sur cette ligne for line in data:. Veuillez corriger cela. Merci.

1 votes

@gsamaras L'idée était d'aider la communauté, contrairement à vos modifications et commentaires inutiles.

18voto

Vishwa Points 734

Vous pourriez simplement écrire dans le fichier comme vous le feriez avec n'importe quel fichier normal.

with open('csvfile.csv','wb') as file:
    for l in text:
        file.write(l)
        file.write('\n')

Si jamais c'est une liste de listes, vous pourriez directement utiliser le module csv intégré

import csv

with open("csvfile.csv", "wb") as file:
    writer = csv.writer(file)
    writer.writerows(text)

10voto

icedwater Points 1727

Je voudrais simplement écrire chaque ligne dans un fichier, car il est déjà au format CSV:

write_file = "output.csv"
with open(write_file, "w") as output:
    for line in text:
        output.write(line + '\n')

Je ne me souviens pas comment écrire des lignes avec des sauts de ligne pour le moment, cependant :p

Aussi, vous pourriez jeter un coup d'œil à cette réponse sur write(), writelines(), et '\n'.

6voto

jrm Points 413

Pour compléter les réponses précédentes, j'ai concocté rapidement une classe pour écrire dans des fichiers CSV. Cela facilite la gestion et la fermeture des fichiers ouverts et permet d'obtenir une cohérence et un code plus propre si vous devez traiter plusieurs fichiers.

class CSVWriter():

    filename = None
    fp = None
    writer = None

    def __init__(self, filename):
        self.filename = filename
        self.fp = open(self.filename, 'w', encoding='utf8')
        self.writer = csv.writer(self.fp, delimiter=';', quotechar='"', quoting=csv.QUOTE_ALL, lineterminator='\n')

    def close(self):
        self.fp.close()

    def write(self, elems):
        self.writer.writerow(elems)

    def size(self):
        return os.path.getsize(self.filename)

    def fname(self):
        return self.filename

Exemple d'utilisation:

mycsv = CSVWriter('/tmp/test.csv')
mycsv.write((12,'vert','pommes'))
mycsv.write((7,'jaune','bananes'))
mycsv.close()
print("Écrit %d octets dans %s" % (mycsv.size(), mycsv.fname()))

Amusez-vous bien

2voto

Vlad Bezden Points 5024

Qu'en est-il de ceci :

with open("votre_fichier_csv.csv", "w") as f:
    f.write("\n".join(text))

str.join() Retourne une chaîne qui est la concaténation des chaînes dans l'itérable. Le séparateur entre les éléments est la chaîne fournissant cette méthode.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X