J'essaie de stocker un fichier de données pandas dans un fichier temporaire au format csv (sous windows), mais je suis touché par:
[Errno 13] Autorisation refusée: 'C:\Utilisateurs\Nom d'utilisateur\AppData\Local\Temp\tmpweymbkye'
import tempfile
import pandas
with tempfile.NamedTemporaryFile() as temp:
df.to_csv(temp.name)
Où df est le cadre de données. J'ai également essayé de changer le répertoire temporaire en un répertoire dont je suis sûr que j'ai les droits en écriture:
tempfile.tempdir='D:/Username/Temp/'
Cela me donne le même message d'erreur
Modifier:
Le fichier temporaire semble être verrouillé pour l'édition comme lorsque je modifie la boucle en:
with tempfile.NamedTemporaryFile() as temp:
df.to_csv(temp.name + '.csv')
Je peux écrire le fichier dans le répertoire temporaire, mais il n'est pas automatiquement supprimé à la fin de la boucle car il ne s'agit plus d'un fichier temporaire.
Cependant, si je change le code en:
with tempfile.NamedTemporaryFile(suffix='.csv') as temp:
training_data.to_csv(temp.name)
Je reçois le même message d'erreur qu'avant. Le fichier n'est ouvert nulle part ailleurs.
Vérifiez vos autorisations et, selon this post, vous pouvez exécuter votre programme en tant qu'administrateur par un clic droit et l'exécuter en tant qu'administrateur.
Nous pouvons utiliser la commande to_csv pour exporter un DataFrame au format CSV. Notez que le code ci-dessous enregistrera par défaut les données dans le répertoire de travail en cours. Nous pouvons l'enregistrer dans un autre dossier en ajoutant le nom de dossier et une barre oblique au fichier.
verticalStack.to_csv('foldername/out.csv').
Vérifiez votre répertoire de travail pour vous assurer que le CSV a été écrit correctement et que vous pouvez l'ouvrir! Si vous le souhaitez, essayez de le ramener en python pour vous assurer qu'il importe correctement.
newOutput = pd.read_csv('out.csv', keep_default_na=False, na_values=[""])
Contrairement à TemporaryFile()
, l'utilisateur de mkstemp()
est responsable de la suppression du fichier temporaire une fois celui-ci terminé.
Avec l'utilisation de cette fonction peut introduire une faille de sécurité dans votre programme. Au moment où vous parvenez à faire quoi que ce soit avec le nom de fichier renvoyé, quelqu'un d'autre vous a peut-être battu. mktemp()
usage peut être facilement remplacé par NamedTemporaryFile()
, en lui passant le delete=False
paramete.
Après l'exportation vers CSV
, vous pouvez fermer votre fichier avec temp.close()
.
with tempfile.NamedTemporaryFile(delete=False) as temp:
df.to_csv(temp.name + '.csv')
temp.close()
Parfois, cela donne cette erreur simplement parce qu’il existe un autre fichier portant le même nom et qu’il n’est pas autorisé à supprimer le fichier précédent et à le remplacer par le nouveau fichier.
Parfois, vous devez vérifier le chemin du fichier si vous avez les droits nécessaires pour lire et écrire le fichier. Surtout quand vous utilisez le chemin relatif.
xxx.to_csv('%s/file.csv'%(file_path), index = False)