2012-10-23 4 views
0

파일 이름에서 구두점을 모두 제거하고 파일 확장자는 그대로 유지하고 싶습니다.파일 확장명을 그대로 유지하면서 파일 이름에서 구두점을 삭제하십시오.

Flowers Rose Muree 25 10 11.jpg 
Time Square New York 20 7 09.png 

내가 파이썬 시도하고있다 :

Flowers.Rose-Murree-[25.10.11].jpg 
Time.Square.New-York-[20.7.09].png 

같이보고 : 내가 원하는

re.sub(r'[^A-Za-z0-9]', ' ', filename) 

하지만 그건 생산 :

꽃 장미를 Muree 25 10 11 JPG 타임 스퀘어 뉴욕 20 7 09 png

구두점을 지우지 만 파일 확장명을 유지하려면 어떻게합니까? 공간 [\W_](?=.*\.)의 각 발생을 대체 할

re.sub(r'(?!\.[A-Za-z0-9]*$)[^A-Za-z0-9]', ' ', filename) 
+0

사용 [os.path.splitext] [1] 먼저 확장을 추출한 다음 다시 결합하십시오. [1] : http://stackoverflow.com/questions/541390/extracting-extension-from-filename-in-python –

답변

7

이 작업을 수행하는 단 하나의 올바른 방법있다 :

  1. os.path.splitext 당신은 파일 이름에 원하는대로 처리 파일 이름과 확장자
  2. 할 일을 얻기가.
  3. 새 파일 이름을 확장자와 연결하십시오.
+0

Oopsie, thanks unutbu. 너무 빨리 기본 응답 ... – katrielalex

0

당신은 당신은 단지 숫자와 문자 뒤에 점으로 취급되지 않는다는 주장 부정적인 내다보기를 사용할 수 있습니다.

+0

당신을 감사합니다! 이제 문서를 읽고 당신이 한 일을 이해할 것입니다. :) – koogee

+0

나는 여기에있는 것을 제안합니다 (http://www.regular-expressions.info/lookaround.html);) –

1

내가 당신을 제안 :

1

이 방법이 적합한 지 확인하십시오. 당신은 실제로 어쨌든 대답의 형식으로 날 이길 @katrielalex 정규식

없이
>>> fname="Flowers.Rose-Murree-[25.10.11].jpg" 
>>> name,ext=os.path.splitext(fname) 
>>> name = name.translate(None,string.punctuation) 
>>> name += ext 
>>> name 
'FlowersRoseMurree251011.jpg' 
>>> 
0

그것을 할 수 있지만, 정규식없는 솔루션 :

In [23]: f = "/etc/path/fred.apple.png" 

In [24]: path, filename = os.path.split(f) 

In [25]: main, suffix = os.path.splitext(filename) 

In [26]: newname = os.path.join(path,''.join(c if c.isalnum() else ' ' for c in main) + suffix) 

In [27]: newname 
Out[27]: '/etc/path/fred apple.png' 
관련 문제