반응형
Notice
Link
스택큐힙리스트
str.translate 메서드는 TypeError를 발생시킵니다 - Translate 메서드는 하나의 인자를 사용해야 합니다 (2개의 인자가 주어졌습니다), Python 2에서 작동했습니다. 본문
카테고리 없음
str.translate 메서드는 TypeError를 발생시킵니다 - Translate 메서드는 하나의 인자를 사용해야 합니다 (2개의 인자가 주어졌습니다), Python 2에서 작동했습니다.
스택큐힙리스트 2023. 11. 27. 12:09반응형
다음은 제가 가진 코드입니다.
import nltk, os, json, csv, string, cPickle
from scipy.stats import scoreatpercentile
lmtzr = nltk.stem.wordnet.WordNetLemmatizer()
def sanitize(wordList):
answer = [word.translate(None, string.punctuation) for word in wordList]
answer = [lmtzr.lemmatize(word.lower()) for word in answer]
return answer
words = []
for filename in json_list:
words.extend([sanitize(nltk.word_tokenize(' '.join([tweet['text']
for tweet in json.load(open(filename,READ))])))])
제가 단어 목록을 테스트하기 위해 별도의 testing.py 파일에서 2-4번 줄을 테스트했습니다.
import nltk, os, json, csv, string, cPickle
from scipy.stats import scoreatpercentile
wordList= ['\'the', 'the', 'the']
print wordList
wordList2 = [word.translate(None, string.punctuation) for word in wordList]
print wordList2
answer = [lmtzr.lemmatize(word.lower()) for word in wordList2]
print answer
freq = nltk.FreqDist(wordList2)
print freq
그리고 명령 프롬프트는 ['the', 'the', 'the']를 반환합니다 (구두점을 제거한 내용).
하지만 동일한 코드를 다른 파일에 넣으면 Python에서 TypeError가 발생하여
File foo.py, line 8, in <module>
for tweet in json.load(open(filename, READ))])))])
File foo.py, line 2, in sanitize
answer = [word.translate(None, string.punctuation) for word in wordList]
TypeError: translate()는 정확히 하나의 인수를 받습니다 (2개가 주어졌습니다)
json_list는 모든 파일 경로의 목록입니다 (이 목록이 유효한지 인쇄하고 확인했습니다). 다른 파일에서 테스트할 때 모든 것이 완벽하게 작동하기 때문에 이 TypeError에 대해 혼란스러워합니다.
답변 1
만약 당신이 Python 3에서 Python 2에서 하는 것과 똑같은 것을 하려고 하는 것이라면, Python 2.0에서 내가 구두점과 숫자를 버리는 데에 이용한 것은 다음과 같다:
text = text.translate(None, string.punctuation)
text = text.translate(None, '1234567890')
Python 3.0에서의 동등한 코드는 다음과 같다:
text = text.translate(str.maketrans('','',string.punctuation))
text = text.translate(str.maketrans('','','1234567890'))
기본적으로 이 코드는 '아무것도 아무것도로 변환하지 마세요' (첫 두 매개변수) 그리고 모든 구두점과 숫자를 None
으로 변환하세요. (즉, 삭제하세요).
답변 2
제목: 파이썬 3 버전에서 str.translate 사용 시 TypeError 발생 - 번역 함수의 사용 방법 변화에 대한 안내서론:
파이썬은 유연성과 사용자 친화성으로 유명한 프로그래밍 언어입니다. 새로운 버전인 파이썬 3은 Python 2와 비교하여 여러 가지 향상된 기능과 변경된 사용법을 포함하고 있습니다. 그 중에서도 `str.translate` 함수의 사용 방법이 변경되어, 이에 따라 TypeError가 발생하는 경우가 있습니다.
본문:
파이썬 2에서는 `str.translate` 함수를 사용할 때, 문자열을 변환하기 위한 단일 매개변수만 입력하면 되었습니다. 그러나 파이썬 3에서는 번역 테이블 객체를 추가로 전달해야 합니다. 이로 인해 코드를 업데이트하지 않으면 TypeError가 발생할 수 있습니다.
이러한 변경 사항은 파이썬의 문자열 조작 기능을 보다 향상시키고자 한 결과입니다. 파이썬 3에서는 `str.translate` 함수에 더욱 다양한 문자열 변환 기능을 추가할 수 있게 되었으며, 이를 위해 번역 테이블 객체를 전달해야 합니다. 이 객체는 새로운 코드에서 정의해야 하며, 변환하려는 문자에 대한 매핑 정보를 갖고 있어야 합니다.
이전 버전의 코드를 파이썬 3에 맞게 업데이트하는 방법은 `str.maketrans` 함수를 사용해 번역 테이블 객체를 생성하고, 이를 `str.translate` 함수에 전달하는 것입니다. `str.maketrans` 함수는 각 문자를 원하는 변환 값으로 매핑하여 번역 테이블 객체를 생성합니다.
예시를 통해 구체적인 사용 방법을 알아보겠습니다. 다음은 파이썬 3에서 `str.translate` 함수를 사용해 문자열에서 모든 숫자를 제거하는 코드입니다.
```python
string = Hello123World
translation_table = str.maketrans(, , 0123456789)
new_string = string.translate(translation_table)
print(new_string) # 출력 결과: HelloWorld
```
이와 같이 `str.maketrans` 함수를 사용하여 번역 테이블 객체를 생성하고, 이를 `str.translate` 함수에 전달함으로써 코드를 수정할 수 있습니다. 이를 통해 파이썬 2에서 발생한 TypeError를 해결할 수 있습니다.
결론:
파이썬 3에서는 문자열 변환 기능을 더욱 향상시키기 위해 `str.translate` 함수의 사용 방법이 변경되었습니다. 이로 인해 파이썬 2에서 작동하던 코드가 TypeError를 발생시킬 수 있습니다. 이를 해결하기 위해 `str.maketrans` 함수를 사용하여 번역 테이블 객체를 생성하고, 이를 `str.translate` 함수에 전달해야 합니다. 새로운 사용 방법을 익힘으로써 파이썬 3에서의 문자열 조작에 대한 이해도를 높일 수 있습니다.
반응형
Comments