Как избежать / в имени файла динамически в Python - PullRequest
1 голос
/ 19 марта 2019

У меня есть программа, которая пишет в определенные файлы, где имя файла генерируется на лету и может содержать специальные символы в произвольном порядке.

Всякий раз, когда в этих специальных символах есть /, код считает его разделителем пути ОС для linux.

Как мне избежать этого динамически?

Демонстрация того, с чем я сталкиваюсь:

import random
special_chars = "$^&%*^(&/"
selected = random.choice(special_chars)
#selected = "/"
with open(__file__ + "%s.txt" % selected) as f:
    f.write("Hello")

Работает очень хорошо, когда это любой другой символ, кроме /, но когда вы выбрали /: Ошибка:

Traceback (most recent call last):
  File "./a.py", line 7, in <module>
    with open(__file__ + "%s.txt" % selected, 'w') as f:
IOError: [Errno 20] Not a directory: './a.py/.txt'

Python 2.7 только пожалуйста.

1 Ответ

0 голосов
/ 20 марта 2019

Как сказал @Nullman, / не является допустимым символом для имен файлов в Linux:

$ touch a

$ touch a/b/c.txt
touch: cannot touch 'a/b/c.txt': Not a directory

Никогда не следует использовать символы / и \ в именах файлов, поскольку в нем много неожиданныхРезультаты.Например:

Терминал Linux:

$ touch a\b\c
$ ls
abc

IPython 3:

In [1]: with open('a\b\c', 'w') as f:
   ...:     f.write(' ')
   ...:     

In [2]: ls
a?\c
...