Разбор комбинации обратного слэша и косой черты в имени файла
Я получаю имя файла из api в этом формате, содержащем сочетание /
и \
.
infilename = ‘c: / mydir1 / mydir2 \ mydir3 \ mydir4 \ 123xyz.csv’
Когда я пытаюсь разобрать структуру каталогов, \
после чего символ преобразуется в один символ.
- Поверните строку в оператор
- Найти путь к текущему файлу
- Как использовать инструкцию pass?
- Почему функция может изменять некоторые аргументы, воспринимаемые вызывающим, но не другие?
- Функции, которые помогают понять структуру json (dict)
Есть ли способ, чтобы получить каждый компонент правильно?
Я уже пробовал:
path.normpath didn't help. infilename = 'c:/mydir1/mydir2\mydir3\mydir4\123xyz.csv' os.path.normpath(infilename) out: 'c:\\mydir1\\mydir2\\mydir3\\mydir4Sxyz.csv'
- Как конвертировать секунды в часы, минуты и секунды?
- Декодер classа classа Python с собственными аргументами?
- Может ли Python распечатать определение функции?
- Как изменить каталог (cd) в Python?
- Как проверить, есть ли все элементы в списке в другом списке?
- В чем цель __str__ и __repr__?
- Как создавать списки содержат только отдельный элемент в Python?
- Почему аргументы, не относящиеся к умолчанию, соответствуют аргументам по умолчанию?
это не видно в вашем примере, но написав это:
infilename = 'c:/mydir1/mydir2\mydir3\mydir4\123xyz.csv'
это не очень хорошая идея, потому что некоторые из строчных (и нескольких прописных) букв интерпретируются как escape-последовательности, если они следуют за антиспашем. Известные примеры: \t
, \b
, есть и другие. Например:
infilename = 'c:/mydir1/mydir2\thedir3\bigdir4\123xyz.csv'
дважды терпит неудачу, потому что 2 символа интерпретируются как «вкладка» и «обратное пространство».
Когда вы имеете дело с буквальным пути в стиле Windows (или регулярными выражениями), вам нужно использовать исходный префикс, и лучше нормализовать свой путь, чтобы избавиться от косой черты.
infilename = os.path.normpath(r'c:/mydir1/mydir2\mydir3\mydir4\123xyz.csv')
Однако исходный префикс применяется только к литералам . Если появляется возвращаемая строка, при печати repr(string)
, как 'the\terrible\\dir'
, тогда в строку уже добавлены символы табуляции, и вы ничего не можете сделать, кроме паршивой пост-обработки.
используйте r перед строкой, чтобы обработать ее как необработанную строку (то есть без форматирования строки).
например
infilename = r'C:/blah/blah/blah.csv'
Подробнее здесь: https://docs.python.org/3.6/reference/lexical_analysis.html#string-and-bytes-literals
Вместо синтаксического анализа \
try parsing по \\
. Обычно вам нужно убежать от \
так что \ символ на самом деле \\
.