2013-05-20 5 views
1

Ok, ce que je veux faire est d'écrire quelque chose dans un fichier CSV. Je fais ceci:Ouvrir la fonction avec le fichier CSV sur Python

directory = open('docs/directory.csv', 'a+', encoding='utf-8') 
name = input('Please insert a name: ') 
phone = input('Please insert a phone number: ') 

directory.write(name + ',' + phone + ',\n') 

print(directory.read()) 

J'utilise 'a+' pour ajouter chaque ligne à la fin du fichier. Ici tout va bien, les données sont ajoutées à la fin du fichier chaque fois que je lance le script, mais le problème est que les données ne sont pas affichées à la fin, apparemment, la fonction read() ne fonctionne pas.

Est-ce que je fais quelque chose de mal? Pourriez-vous m'aider s'il vous plaît? Merci.

+0

Lorsque vous appelez 'read()' qu'espérez-vous obtenir? –

+0

Le contenu du fichier. C'est pourquoi j'ai directory.read() –

+0

Ce n'est pas comme ça que ça va marcher. Voir la réponse de @mgilson pour pourquoi. –

Répondre

1

Lorsque vous appelez read, vous lisez à partir de la position actuelle du pointeur de fichier à la fin du fichier. Cependant, vous avez déjà le pointeur de fichier à la fin du fichier, donc rien n'est retourné.

Dans ce cas, je voudrais ouvrir le fichier en mode 'rw+', chercher à la fin, puis ajouter des choses.

directory = open('docs/directory.csv', 'a+', encoding='utf-8') 
directory.seek(0,2) #seek to the end 

name = input('Please insert a name: ') 
phone = input('Please insert a phone number: ') 

directory.write(name + ',' + phone + ',\n') 

directory.seek(0) #seek back to beginning 
print(directory.read()) 
+0

Eh bien, merci pour votre réponse. J'ai essayé d'utiliser rw +, mais j'ai une erreur, donc j'ai fait quelque chose de similaire, j'ai utilisé un + et l'avant d'imprimer (directory.read()), j'ai utilisé directory.seek (0) et ça a marché. Merci de votre aide. –

+0

@AndresOrozco - désolé à ce sujet. Mis à jour et testé cette fois :) – mgilson

0

Python dispose d'une bibliothèque standard pour qui a appelé csv

import csv 
with open('eggs.csv', 'wb') as csvfile: 
    spamwriter = csv.writer(csvfile, delimiter=' ', 
          quotechar='|', quoting=csv.QUOTE_MINIMAL) 
    spamwriter.writerow(['Spam'] * 5 + ['Baked Beans']) 
    spamwriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam']) 

ressources: "using csv module"

0

Essayez ceci:

~$ cat test.py 
name = raw_input('Please insert a name: ') 
phone = raw_input('Please insert a phone number: ') 

# Opening in a+ mode will point the file pointer to the end of the file. 
# We will fix this with seek(). 
directory = open('test.csv', 'a+') 

# Seek to the 0th offset from the end of the file (option 2). 
directory.seek(0, 2) 

# Write the data at the end of the file. 
directory.write(name + ',' + phone + '\n') 

# Seek to the beginning of the file (option 0). 
directory.seek(0, 0) 

# Read the file and print output. 
print(directory.read()) 
~$ >test.csv 
~$ python test.py 
Please insert a name: Test Name 1 
Please insert a phone number: 111-222-3344 
Test Name 1,111-222-3344 

~$ python test.py 
Please insert a name: Test Name 2 
Please insert a phone number: 222-333-4444 
Test Name 1,111-222-3344 
Test Name 2,222-333-4444 

~$ 
Questions connexes