고수님들 파이썬 엑셀파일 만드는 코드좀 부탁드립니다
조회수 312회
- 첫번째 행은 "아무나"
- 두번째 행은 010-xxxx-yyyy 로 저장이되는데
- 여기서 xxxx나 yyyy 3번 이상 같은 숫자가 아닌 것입니다(ex 010-1111-1234 안됨)
한마디로 모든 전화번호를 저장하는 엑셀파일을 만들고 싶은데 xxxx안이나 yyyy안에서 같은 숫자가 3자리 이상 없는 전화번호입니다.
1 답변
-
"3번 이상 같은 숫자가 아닌 것" 라는 설명이 애매모호하네요. 대충 해석해서 해보면요.
이런 숫자조합 같은 걸 위해선 itertools 를 잘 사용하면 좋습니다.
itertools.product 란 것이 있습니다.
1234를 두번 써서 나올 수 있는 모든 경우를 나열합니다.
>>> list(itertools.product(list("1234"), repeat=2)) [('1', '1'), ('1', '2'), ('1', '3'), ('1', '4'), ('2', '1'), ('2', '2'), ('2', '3'), ('2', '4'), ('3', '1'), ('3', '2'), ('3', '3'), ('3', '4'), ('4', '1'), ('4', '2'), ('4', '3'), ('4', '4')]
제한조건 없이 4자리 숫자를 만드려면
itertools.product(list("0123456789"), repeat=4)
라고 하면 됩니다. 0~9 까지 숫자를 4번 써서 모든 경우를 구하는 겁니다.3번이상 같은 숫자가 아닌 것이란 말을, 4자리 숫자가 2종류
이상초과로 구성된다고 해석했습니다. 그럼 같은 숫자가 3개 이상 나올 수 없습니다.이 조건을 포함해서 구하려면, 4자리 숫자 전체경우에서 filter 라는 함수를 적용해서 필터링하면 됩니다.
>>> xxxx = list(filter(lambda l: len(set(l)) > 2, itertools.product(list("0123456789"), repeat=4))) >>> len(xxxx) 9360 >>> xxxx[:10] [('0', '0', '1', '2'), ('0', '0', '1', '3'), ('0', '0', '1', '4'), ('0', '0', '1', '5'), ('0', '0', '1', '6'), ('0', '0', '1', '7'), ('0', '0', '1', '8'), ('0', '0', '1', '9'), ('0', '0', '2', '1'), ('0', '0', '2', '3')]
튜플을 문자열로 바꿉니다.
>>> xxxx = [ ''.join(l) for l in xxxx ] >>> xxxx[:10] ['0012', '0013', '0014', '0015', '0016', '0017', '0018', '0019', '0021', '0023']
xxxx, yyyy 이 만들어지는 조건은 똑같으니까, 이 xxxx 세트를 가지고 다시 2개씩 뽑아 모든 경우를 구하여 전화번호 꼴로 만듭니다.
>>> xxxxyyyy = [ "-".join(it) for it in itertools.product(xxxx, repeat=2) ] >>> len(xxxxyyyy) 87609600 >>> xxxxyyyy[:5] ['0012-0012', '0012-0013', '0012-0014', '0012-0015', '0012-0016'] >>> xxxxyyyy[3435] '0012-3679' >>> xxxxyyyy[3030939] '0363-8177'
pandas 를 이용해서 excel 로 내보내 봅시다.
>>> import pandas as pd >>> data = [ "010-"+s for s in xxxxyyyy ] >>> df = pd.DataFrame(data, columns = ["아무나"]) >>> df 아무나 0 010-0012-0012 1 010-0012-0013 2 010-0012-0014 3 010-0012-0015 4 010-0012-0016 ... ... 87609595 010-9987-9983 87609596 010-9987-9984 87609597 010-9987-9985 87609598 010-9987-9986 87609599 010-9987-9987 [87609600 rows x 1 columns] >>> df.to_excel("c:\\temp\\전화번호.xlsx") Traceback (most recent call last): File "<pyshell#28>", line 1, in <module> df.to_excel("c:\\temp\\전화번호.xlsx") File "C:\PROGRAMS\Python3864\lib\site-packages\pandas\core\generic.py", line 2284, in to_excel formatter.write( File "C:\PROGRAMS\Python3864\lib\site-packages\pandas\io\formats\excel.py", line 823, in write raise ValueError( ValueError: This sheet is too large! Your sheet size is: 87609600, 1 Max sheet size is: 1048576, 16384
데이터가 너무 많아서 엑셀파일로는 만들어지지 않습니다. csv 로 시도합니다.
>>> df.to_csv(r"c:\temp\전화번호.csv", index=False)
댓글 입력