Как избежать специального символа
Я получил следующий код для обработки проблемы китайских символов или какой-то специальный символ в файле powerpoint, потому что я хотел бы использовать содержимое ppt
в качестве имени файла для сохранения. Если он содержит какой-то специальный символ, он выдаст какое-то исключение, поэтому я использую следующий код для его обработки.
Он отлично работает под Python 2.7, но при запуске с Python 3.0 выдает следующую ошибку:
if not (char in '<>:"/\|?*'):
TypeError: 'in <string>' requires string as left operand, not int
Я погуглил сообщение об ошибке, но не понимаю, как его устранить. Я знаю код if not (char in '<>:"/\|?*'):
это преобразовать символ в кодовый номер ASCII, верно?
Есть ли пример, чтобы исправить мою проблему в Python 3?
def rm_invalid_char(self,str):
final=""
dosnames=['CON', 'PRN', 'AUX', 'NUL', 'COM1', 'COM2', 'COM3', 'COM4', 'COM5', 'COM6', 'COM7', 'COM8', 'COM9', 'LPT1', 'LPT2', 'LPT3', 'LPT4', 'LPT5', 'LPT6', 'LPT7', 'LPT8', 'LPT9']
for char in str:
if not (char in '<>:"/\|?*'):
if ord(char)>31:
final+=char
if final in dosnames:
#oh dear...
raise SystemError('final string is a DOS name!')
elif final.replace('.', '')=='':
print ('final string is all periods!')
pass
return final
3 ответа
Вы передаете итерируемое, первым элементом которого является целое число (232) rm_invalid_char()
, Проблема не в этой функции, а в вызывающей.
Некоторая отладка в порядке: в самом начале rm_invalid_char()
, ты должен сделать print(repr(str))
: вы не увидите строку, вопреки ожиданиям rm_invalid_char()
, Вы должны исправить это, пока не увидите ожидаемую строку, изменив код перед rm_invalid_char()
называется.
Вероятно, проблема связана с тем, как Python 2 и Python 3 обрабатывают строки (в Python 2 str
объекты являются строками байтов, в то время как в Python 3 они являются строками символов).
Просто: используйте это
re.escape(YourStringHere)
Из документов:
Возвращает строку со всеми не алфавитно-цифровыми символами с обратной косой чертой; это полезно, если вы хотите сопоставить произвольную литеральную строку, в которой могут быть метасимволы регулярного выражения.
Мне любопытно, почему в "str" есть нечто, действующее как целое число - что-то странное происходит с вводом.
Тем не менее, я подозреваю, если вы:
- Измените имя вашего
str
значение для чего-то другого, напримерchar_string
- Сразу после
for char in char_string
Приведите все, что вы вводите в строку
тогда описанная вами проблема будет решена.
Вы можете также рассмотреть возможность добавления случайного бита в конец вашего сгенерированного имени файла, чтобы вам не пришлось беспокоиться о столкновении с зарезервированными именами DOS.