Pourquoi Python 2.7.3 pense que mon .document csv est sur une seule ligne?
Je suis nouveau en programmation et j'ai rencontré un problème dans certains de mes cours que je ne peux pas donner un sens. Envisager un fichier imaginaire appelé 'exemple.csv " avec le contenu suivant.
Key1,Value1
Key2,Value2
Key3,Value3
...
Si j'exécute le code suivant, il imprime chaque ligne du fichier, suivi par un astérisque sur la dernière ligne. Je m'attendais à imprimer chaque ligne séparées par un astérisque.
infile = open("example.csv", "r")
for line in infile:
print line.strip()
print '*'
#row_elements = line.split(",")
#print row_elements
En outre, si j'essaie de séparer la ligne à chaque virgule en supprimant les valeurs de hachage dans le code ci-dessus, j'obtiens le résultat suivant.
['Key1', 'Value1\rKey2', 'Value2\rKey3'...
En passant "\r" à la .méthode split() la sortie est légèrement améliorée.
['Key1,Value1', 'Key2,Value2'...
Je ne comprends toujours pas pourquoi python pense que le fichier est sur une seule ligne dans la première place. Quelqu'un aurait-il aperçu?
\r\n
au lieu de \n
.Non, ses fins de ligne sont
'\r'
. Pourquoi devrait-il être? @Jeremy, quel système d'exploitation utilisez-vous? Ce programme créé le fichier CSV?Je pense toujours que c'est
\r\n
parce que dans le premier exemple de sortie il semble que les espaces et \n
sont manquants. Essayez d'ouvrir le fichier en mode universel en utilisant open("example.csv", "rU")
Rob, je suis sous mac OS X 10.5, mais je pense que le problème est venu après que j'ai édité le fichier csv dans Excel. J'ai essayé de lancer le programme avec une version non définitive du fichier et cela a fonctionné comme prévu. Donc, je dirais que Excel reformaté quand je l'ai sauvé.
OriginalL'auteur Jeremy Caron | 2013-03-07
Vous devez vous connecter pour publier un commentaire.
Votre fichier à l'aide de
\r
comme ligne de séparateurs (aussi connu comme le "CR" ou "Mac Classic" newline convention). Pythonopen
ne s'occupe pas de cette fonction par défaut.Vous pouvez utiliser "universel des retours à la ligne" mode (
'rU'
mode dansopen
) pour ouvrir le fichier correctement.(Notez que certains Mac éditeurs de texte utilisent encore
\r
comme le terminateur de ligne, même si elles sont heureusement beaucoup moins fréquent aujourd'hui qu'ils l'étaient il y a quelques années.)'U'
.Cela a été très utile et 'rU' mode a très bien fonctionné. Merci!
OriginalL'auteur nneonneo
Votre fichier d'entrée est mal formaté. Sur Linux, les lignes sont séparées par des
'\n'
. Sur Windows, les lignes sont séparées par des'\r\n'
, mais le code dans la bibliothèque d'exécution rend la'\r'
disparaître.Dans votre fichier, les lignes sont séparées par
'\r'
, ce qui n'est pas un standard dans tout système d'exploitation moderne. Peut-être le programme qui a créé le fichier est défectueux en quelque sorte.OriginalL'auteur Robᵩ
si vous faites affaire avec csv, vous devez utiliser le
csv
module, il prend soin de la plupart de la merde impliquées dans le traitement de csv d'entrée/sortie.La
déclaration entendre se ferme automatiquement le fichier pour vous lorsque vous déposez de l'instruction de bloc.
"U"
. Peut-être que votre réponse serait mieux comme un commentaire.oui, je suis d'accord, mais il ne serait pas bien dans un commentaire.
OriginalL'auteur monkut