Question

Chaque fois que j'essaie d'ouvrir un fichier .csv avec la commande python fread = open ('input.csv', 'r') il ouvre toujours le fichier avec des espaces entre chaque caractère. Je suppose que le fichier texte a un problème car je peux ouvrir d'autres fichiers texte avec la même commande et ils sont chargés correctement. Est-ce que quelqu'un sait pourquoi un fichier texte se chargerait ainsi en python?

Merci.

Mettre à jour

Ok, je l’ai obtenu avec l’aide du message de Jarret Hardie

c'est le code que j'ai utilisé pour convertir le fichier en ascii

fread = open('input.csv', 'rb').read()
mytext = fread.decode('utf-16')
mytext = mytext.encode('ascii', 'ignore')
fwrite = open('input-ascii.csv', 'wb')
fwrite.write(mytext)

Merci!

Était-ce utile?

La solution

Le message de récursif est probablement correct ... le contenu du fichier est probablement codé avec un jeu de caractères multi-octets. Si tel est le cas, vous pouvez probablement lire le fichier en python lui-même sans avoir à le convertir au préalable en dehors de python.

Essayez quelque chose comme:

fread = open('input.csv', 'rb').read()
mytext = fread.decode('utf-16')

L’indicateur 'b' garantit que le fichier est lu en tant que données binaires. Vous aurez besoin de connaître (ou de deviner) le codage d'origine ... Dans cet exemple, j'ai utilisé utf-16, mais YMMV. Cela convertira le fichier en unicode. Si vous avez vraiment un fichier avec des caractères multi-octets, je ne recommande pas de le convertir en ascii car vous risqueriez de perdre beaucoup de caractères au cours du processus.

EDIT: Merci d’avoir téléchargé le fichier. Il y a deux octets à l'avant du fichier qui indique qu'il utilise effectivement un jeu de caractères large. Si vous êtes curieux, ouvrez le fichier dans un éditeur hexadécimal, comme certains l’ont suggéré ... vous verrez quelque chose dans la version textuelle comme "I.D. |.". (etc). Le point est l'octet supplémentaire pour chaque caractère.

L'extrait de code ci-dessus semble fonctionner sur mon ordinateur avec ce fichier.

Autres conseils

Le fichier est encodé dans un encodage Unicode, mais vous le lisez en tant qu'ascii. Essayez de convertir le fichier en ascii avant de l’utiliser en python.

Csv n’est-il pas un simple fichier txt avec des valeurs séparées par une virgule. Essayez simplement de l'ouvrir avec un éditeur de texte pour voir si le fichier est correctement formé.

Pour lire un fichier codé, vous pouvez simplement remplacer open par codecs.open .

fread = codecs.open('input.csv', 'r', 'utf-16')

Cela ne m'est jamais arrivé, mais comme l'a dit Truppo, il doit y avoir un problème avec le fichier.

Essayez d'ouvrir le fichier dans Excel / BrOffice Calc et enregistrez à nouveau le fichier sous Csv.

Si le problème persiste, essayez un sous-ensemble des données: 10 premières lignes / 10 dernières / 10 lignes intermédiaires du fichier.

Ok, je l’ai obtenu avec l’aide du message de Jarret Hardie

c'est le code que j'ai utilisé pour convertir le fichier en ascii

fread = open('input.csv', 'rb').read()
mytext = fread.decode('utf-16')
mytext = mytext.encode('ascii', 'ignore')
fwrite = open('input-ascii.csv', 'wb')
fwrite.write(mytext)

Merci!

Ouvrez le fichier en mode binaire, 'rb'. Vérifiez-le dans un éditeur HEX et vérifiez le remplissage nul '00'. Ouvrez le fichier dans quelque chose comme Scintilla Text Editor pour vérifier les caractères présents dans le fichier.

Voici le moyen rapide et facile, surtout si python ne va pas analyser correctement l'entrée

sed 's/ \(.\)/\1/g'
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top