J'ai un gros fichier (3,5 G) que j'essaie d'importer à l'aide de data.table::fread
.
Il a été créé à l'origine à partir d'un fichier rpt qui a été ouvert en tant que texte et enregistré en tant que CSV.
Cela a bien fonctionné avec des fichiers plus petits (du même type de données - mêmes colonnes et tout. Celui-ci est juste pour une période plus longue et une portée plus large).
Quand j'essaie de courir
mydata <- fread("mycsv.csv")
Je reçois l'erreur:
Erreur en fread ("mycsv.csv"): nul intégré dans la chaîne: 'y\0e\0a\0r\0'
Qu'est-ce que ça veut dire?
Nous pouvons supprimer les terminateurs nuls sur la ligne de commande en utilisant quelque chose comme:
sed 's/\\0//g' mycsv.csv > mycsv.csv
Ou comme suggéré par @marbel, fread vous permet de passer l'appel sed à l'intérieur du texte. Tel que:
fread("sed 's/\\0//g' mycsv.csv")
Vous pouvez tester cette petite fonction:
cleanFiles<-function(file,newfile){
writeLines(iconv(readLines(file,skipNul = TRUE)),newfile)
}
C'est du travail pour moi
Dans ce cas, vous pouvez utiliser read.csv
avec fileEncoding de UTF-16LE plutôt que fread
.
read.csv("mycsv.csv",fileEncoding="UTF-16LE")
Compte tenu de la taille de vos données, utilisez read.csv
prendrait quelques minutes, mais je pense que ce n'est pas grave.
Un moyen non technique de résoudre ce problème serait de
Ouvrez la problématique . Csv
Ctrl + A (Tout sélectionner)
Ouvrir une nouvelle feuille Excel
Faites un clic droit et choisissez "Coller comme valeurs"
Enregistrez et utilisez ce fichier à la place de l'original.
A fonctionné pour moi et ne prend pas beaucoup de temps.
Si vous voyez des caractères NUL (x00) dans un fichier ASCII vous pouvez le faire: data.table :: fread (text = readLines (pathIn, skipNul = T), ...)