입력 인자의 라인을 반복 처리하지만 문자열이나 파일과 같은 객체를 받아 들일 수있는 파이썬 함수를 작성하고 싶다. 이것을 할 수있는 방법이 있습니까?필자는 파이썬 함수를 사용하여 행을 반복한다. 문자열이나 파일과 같은 객체를 받아 들인다.
def myfunc(x):
for line in x:
doSomething(line)
위의 코드는 문자열을 파일 - 류의 객체에 대한 아니라 작동하고, 내 진짜 작업이 위보다 훨씬 더 복잡하기 때문에 차라리 두 개가 아닌 하나의 함수를 작성할 것입니다.
필자는 파일과 같은 객체를 테스트하지 않을 것입니다. 이제는 파일과 읽기 버퍼 ('StringIO'가 소비 할 수있는 것)로 제한되었습니다. 차라리 iterator (hasattr (x, 'next')'또는'try : iter (x)','except TypeError :')를 테스트 할 것입니다. –
'iter ("foo")'와 iter (open ('file.txt'))'모두 작동합니다. 나는'hasattr (x, 'next')'를 사용할 수 있다고 생각한다. 어쨌든, OP의 try/except 모양은 API가 실제로 무엇을 보여야하는지에 달려 있습니다. OP는 문자열과 파일 객체를 말한 것뿐입니다. 이를 문자열, 파일 객체 및 기타 iterables로 확장하려면 항상 첫 번째 버전을 사용할 수 있습니다. 여기에 가능성은 다양한 제한/허용 범위 (이는 내가 그것을 입증하는 2 가지 옵션을 게시 한 이유의 일부 임)에 따라 끝이 없습니다. – mgilson
받아 들였습니다 - 여기에 여분의 닦는 것은 내가 몰랐던'splitlines (True)'의 사용이었습니다. 이것은 파일과 같은 객체의 문자열과 행 사이의 동작을 근본적으로 동일하게 만듭니다. –