본문 바로가기
파이썬

파이썬 Python string.replace ()가 문자를 대체하지 않음

by º기록 2020. 11. 9.
반응형

몇 가지 배경 정보 : 우리는 제가 작업하는 고대 웹 기반 문서 데이터베이스 시스템을 가지고 있습니다. 거의 전적으로 "보통"확장자 (.doc, .xls, .ppt)를 가진 MS Office 문서로 구성되어 있습니다. 이들은 모두 일종의 임의의 ID 번호 (예 : 1245.doc)에 따라 이름이 지정됩니다. SharePoint로 전환 중이며 이러한 모든 파일의 이름을 바꾸고 폴더로 정렬해야합니다. 모든 종류의 정보 (예 : 문서 제목에 해당하는 ID 번호)가 포함 된 CSV 파일이 있으므로이 파일의 이름을 변경하는 데 사용하고 있습니다. ID 번호 제목의 이름을 바꾸는 짧은 Python 스크립트를 작성했습니다.

그러나 문서 제목 중 일부에는 슬래시 및 파일 제목에 포함 할 수있는 기타 잘못된 문자가 있으므로 밑줄로 바꾸고 싶습니다.

bad_characters = ["/", "\\", ":", "(", ")", "<", ">", "|", "?", "*"]
for letter in bad_characters:
    filename = line[2].replace(letter, "_")
    foldername = line[5].replace(letter, "_")

for 루프 내부에 print letter 를 추가하면 교체해야 할 문자가 인쇄되지만 실제로 해당 문자를 저와 같이 밑줄로 바꾸지는 않습니다. 원합니다.

내가 여기서 잘못하고있는 것이 있습니까?

 

해결 방법

 

그 이유는 filename foldername 이 루프가 반복 될 때마다 버려지기 때문입니다. .replace () 메서드는 문자열을 반환하지만 결과를 어디에도 저장하지 않습니다.

다음을 사용해야합니다.

filename = line[2]
foldername = line[5]

for letter in bad_characters:
    filename = filename.replace(letter, "_")
    foldername = foldername.replace(letter, "_")

하지만 정규식을 사용하여 할 것입니다. 더 깨끗하고 빠릅니다.

p = re.compile('[/:()<>|?*]|(\\\)')
filename = p.sub('_', line[2])
folder = p.sub('_', line[5])

 

참조 페이지 https://stackoverflow.com/questions/3523054

 

 

반응형

댓글