3
votes

comment enregistrer un fichier en Python dont le nom contient des barres obliques

Je suis en train de parcourir une série de noms dans un tuple et je veux enregistrer la sortie pendant chaque boucle en utilisant les données du tuple comme nom de fichier. Cependant, les noms comportent des barres obliques.

layers = ['conv1/7x7_s2','pool1/3x3_s2']
for idx,layer in enumerate(layers):
    result=deepdream(net, img, end=layer)
    imag = PIL.Image.fromarray(result,'RGB')
    imag.save('files/'+str(layer)+'.png')

Le résultat contient un tableau numpy imag est l'image la couche est ce que je veux que le nom du fichier soit

Cependant, la barre oblique est interprétée comme un délimiteur de répertoire Existe-t-il un moyen d'enregistrer l'image sous conv1 / 7x7_s2.png

ou devrais-je simplement convertir la barre oblique en tiret?


2 commentaires

D'après ce que j'ai compris, il existe une poignée de caractères qui sont spécifiquement utilisés pour le système d'exploitation et ne peuvent jamais être utilisés dans les noms. la barre oblique en fait partie. Je recommanderais de le remplacer par un tiret ou un autre caractère.


Si vous essayez d'enregistrer des fichiers dans des fenêtres avec des barres obliques dans le nom, vous ne pouvez pas le faire. Vérifiez ceci.


3 Réponses :


0
votes

La structure du répertoire étant définie, vous ne pouvez pas . Comme les systèmes Linux analyseront le / comme un composant de l'arborescence de répertoires. Vous devez simplement remplacer la barre oblique par un tiret ou des traits de soulignement.


0 commentaires

1
votes

Aucun de ces caractères ne peut être utilisé dans les noms de fichiers (du moins pas sur un système de fichiers Windows): \ , / , : , * , ? , ", <, > et | < / code>. Ils ont tous des significations alternatives spécifiques.

Il n'y a pas non plus de caractère d'échappement ou autre moyen de le contourner - vous devrez simplement omettre ou remplacer ces caractères dans les noms de fichiers.


0 commentaires

2
votes

Oui, il existe des façons compliquées de conserver la "barre oblique", mais elles n'en valent probablement pas la peine (c'est-à-dire en utilisant une barre oblique de division unicode).

layers = ['conv1/7x7_s2','pool1/3x3_s2']
for idx, layer in enumerate(layers):
    print(layer.replace('/', '_'))
    # or maybe this might work?
    # print(layer.replace('/', u"\u2215"))


1 commentaires

désolé, j'aurais dû être plus clair - j'utilise Linux. mais oui, j'essaye de «simuler» le caractère barre oblique dans le nom de fichier, donc j'utiliserai probablement un caractère unicode qui ressemble aux humains comme une barre oblique mais qui ne l'est vraiment pas. merci à eric pour l'idée.