2016-04-04 2 views
1

Я пытаюсь работать с пути в Python 2.7Python добавляет специальные символы путь струне

Это то, что я пытаюсь делать в главном классе:

program = MyProgram() 
program.doSomething('C:\Eclipse\workspace\MyProgram\files\12345678_Testing1_ABCD005_Static_2214_File12.txt') 

Внутри функции doSomething(filePath) строка уже выглядит следующим образом:

Deformated string

Так что это своего рода специальный символ плюс некоторые символы удаляются copletely. Что может вызвать эту проблему?

+0

является то, что путь правильный? обычно вам нужно сбежать назад косые черты или передать необработанную строку следующим образом: 'program.doSomething (r'C: \ Eclipse \ workspace \ MyProgram \ files \ 12345678_Testing1_ABCD005_Static_2214_File12.txt ')' – EdChum

ответ

2

\ is escape char в Python. According to docs, вы создали строку с символом \f ASCII Formfeed (FF).

строковые литералы могут быть заключены в соответствующие одиночные кавычки (') или двойные кавычки ("). Они также могут быть заключены в сопоставимые группы из трех одиночных или двойных кавычек (они обычно называются строками с тремя кавычками ). Символ обратной косой черты (\) используется для удаления символов , которые в противном случае имеют особое значение, например, символ новой строки, или символ кавычки.

Либо использовать двойной слеши (\\ - чтобы избежать экранирующего символа) или использовать сырые строковые литералы (r"some\path").

Строковые литералы необязательно могут иметь префикс буквы «r» или «R»; такие строки называются необработанными строками и используют разные правила для , интерпретирующих escape-последовательности обратной косой черты.

+1

Или, проще говоря, используйте '/' как разделитель путей, который отлично работает и в Windows. –

+0

Отлично, спасибо! – John

1

Обратная косая черта, похоже, создает особый символ. Помещение дополнительной обратной косой черты (чтобы выступать в качестве спасательного персонажа) за спиной косой чертой должно исправить это.

program = MyProgram() 
program.doSomething('C:\\Eclipse\\workspace\\MyProgram\\files\\12345678_Testing1_ABCD005_Static_2214_File12.txt') 
+1

Tjis работает! Большое спасибо! – John

2

Это, вероятно, избыточна в вашей ситуации, вы могли бы использовать os.path.join для создания пути. При этом у вас есть два преимущества:

  • он строит пути, используя разделитель текущей системы (Unix «/» VS Windows «\»)
  • вы не должны заботиться о побеге из сепаратора в случае окон

Как уже говорилось, это, вероятно, избыточна для вашего кода:

import os.path 
program = MyProgram() 
my_path = os.path.join('C:', 
         'Eclipse', 
         'workspace', 
         'MyProgram', 
         'files', 
         '12345678_Testing1_ABCD005_Static_2214_File12.txt') 
program.doSomething(my_path) 
Смежные вопросы