2017-05-03 8 views
0

내가 바보 같은 짓을하고 있다고 생각해. 정규식을 사용하여 파이썬에서 IP 주소를 찾기 위해 파일을 검색하려면 어떻게해야합니까?정규식을 사용하여 IP 주소를 찾기 위해 csv 파일을 검색하는 방법은 무엇입니까?

def ip(): 
    ip = csv.reader(open('IP.csv'), delimited=',', quotechar='|') 
    for x in ip: 
     match = re.findall(r'(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})',x) 
     if x == ipmatch: 
      print(x) 

어디 내가이 프로그램을 실행할 때 TypeError: expected string or bytes-like object를 얻을 잘못된 것입니다 :

는 지금까지 내가 가진 무엇인가? 잘못된 위치에서 일치 변수를 사용하려고합니까?

+0

코드가 오류를 생성 할 때 코드의 내용을 지정하는 것이 아니라 ** 발생하는 위치를 지정하는 것이 중요합니다. 가능한 경우 전체 Traceback을 포함시키는 것이 더 좋습니다. 그 외에도 샘플 입력 데이터를 제공하면 다른 사람들에게 솔루션을 찾는 데 매우 유용 할 수 있습니다. – martineau

+1

파일에서 몇 줄의 예제를 게시 할 수 있습니까? –

+1

문제는 아마도'csv.reader'가 산출하는'x' 값이 모두 ** 목록 ** 값이기 때문일 것입니다. 당신은 그것의 각 요소를're.findall()'에 개별적으로 전달할 필요가있다 ** 또는 ** ip 주소를 가질 수있는 csv 파일의 컬럼에 대응하는 요소 (예 :'x [3] '. – martineau

답변

0

CSV 파일은 일련의 행으로, 각 행에는 여러 필드가 있습니다. x 변수는 각 행을 차례로 나타냅니다. 하지만 행은 목록입니다, 당신은 목록에 정규 표현식을 사용할 수 없습니다.

나는 당신이하고 싶은 것을 정확히 모르겠습니다. 각 행에 필드가 하나만있는 경우 CSV 모듈을 전혀 사용하지 말고 파일의 행을 반복하면됩니다.

+0

나는 네가 행과 들판에 관한 그 단계를 놓쳤다는 것을 안다. 내가하고 싶은 것은 csv 파일을 살펴보고 정규식 패턴과 일치하는 모든 행/필드의 문자열을 인쇄하는 것입니다. 내가 잘못된 방향으로 가고있는 것 같아. – user2086572