728x90
반응형

 티스토리 

 

파이썬으로 작성된 스크립트를 .exe 실행파일 생성 과정

 이 작업을 수행하기 위해 일반적으로 사용되는 몇 가지 도구가 있습니다. 그중에서도 PyInstaller, cx_Freeze, py2exe가 가장 널리 사용됩니다. 각각의 도구는 약간씩 다른 기능과 사용 방법을 가지고 있으며, 사용자의 요구 사항에 따라 가장 적합한 도구를 선택할 수 있습니다.

PyInstaller는 사용이 간편하며크로스 플랫폼을 지원하여 Windows, macOS, Linux에서 사용할 수 있습니다. 단일 파일로 묶는 옵션이 있어 배포가 용이합니다.
cx_Freeze는 Python 스크립트를 실행 파일로 변환하는 데 사용되며, 여러 플랫폼을 지원합니다.
py2exe는 Windows에서만 사용할 수 있으며, Python 스크립트를 Windows 실행 파일로 변환합니다.
일반적인 PyInstaller 사용 방법을 예로 들어 설명해 드리겠습니다. 

반응형

1.사용 방법

.PyInstaller를 사용하여 Python 스크립트를 .exe 파일로 변환하는 과정은 다음과 같습니다:

PyInstaller 설치: PyInstaller를 설치하려면, Python이 설치된 환경에서 커맨드 라인이나 터미널을 열고 다음 명령어를 실행합니다.

pip install pyinstaller

 

실행 파일 생성: 스크립트가 위치한 디렉토리에서 다음 명령어를 실행하여 .exe 파일을 생성합니다. 여기서 your_script.py는 변환하려는 스크립트의 파일 이름입니다.

 

pyinstaller --onefile your_script.py

참고 : --onefile 대신 -F를 사용해도 동일하게 동작합니다.

아이콘 추가
--icon 옵션을 사용하여 실행 파일에 아이콘을 추가할 수 있습니다. 이는 애플리케이션의 전문성을 높이는 데 도움이 됩니다.

pyinstaller --onefile --icon=your_icon.ico your_script.py

 

추가 데이터 파일 포함
PyInstaller는 --add-data 옵션을 사용하여 실행 파일에 추가 데이터 파일이나 디렉토리를 포함시킬 수 있습니다. 이 옵션은 다음과 같은 형식을 사용합니다: 소스;대상 (Windows) 또는 소스:대상 (Unix)

pyinstaller --add-data 'data_folder;data' your_script.py

이렇게 하면, data_folder 내의 모든 파일이 실행 파일 내 data 폴더로 복사됩니다.

디버깅 모드
문제 해결 시, --debug 옵션을 사용하여 실행 파일을 디버깅 모드로 빌드할 수 있습니다. 이는 문제의 원인을 파악하는 데 유용합니다.

pyinstaller --debug all your_script.py

결과 확인
명령어 실행 후 dist 폴더가 생성되며그 안에 .exe 파일이 위치합니다--onefile 옵션은 모든 필요한 라이브러리와 함께 단일 실행 파일을 생성합니다이 옵션 없이 실행하면, 실행에 필요한 모든 파일을 포함한 폴더가 생성됩니다.

도움이 되셨다면 아래 화면 클릭으로 보다 나은 컨텐츠를 만드는데 큰 도움이 됩니다.

728x90

 

마무리

PyInstaller의 사용법과 기능은 상당히 광범위하며, 여기서 언급한 내용은 그 일부에 불과합니다.
PyInstaller의 공식 문서[PyInstaller Documentation](https://pyinstaller.readthedocs.io

- 이번 포스팅은 pyinstaller로 exe 파일 만들기에 대해 알아봤습니다.

 
 

궁금한 사항은 lution2@gmail.com로 문의사항  주시면 답변 드리겠습니다.
감사합니다.

 

 

728x90
반응형
728x90
반응형

 티스토리 

 

현재 디렉토리에 있는 파일 접

Python의 Path 객체를 사용하여 현재 실행 중인 스크립트 파일(__file__)과 동일한 디렉토리에 있는 "abc.csv" 파일의 경로를 생성하는 방법을 보여줍니다. 여기에서 Path는 pathlib 모듈의 일부로, 파일 시스템 경로를 객체 지향적으로 쉽게 다룰 수 있게 해줍니다.

아래 광고 클릭으로 보다 많은 정보를 나눌수 있는 큰힘이 됩니다.~!  

반응형

1. 코드리뷰

from pathlib import Path

# 현재 스크립트와 같은 디렉토리에 있는 'abc.csv' 파일의 경로 생성
fpath = Path(__file__).parent / "abc.csv"

# 생성된 경로 확인
print(fpath)

 

코드 분석 아래 클릭 : 

더보기

Path(__file__): __file__ 전역 변수는 현재 실행 중인 Python 스크립트 파일의 경로를 포함합니다. Path(__file__)를 사용하면 이 경로를 Path 객체로 변환합니다. 이 객체는 파일 시스템 경로를 쉽게 조작할 수 있는 여러 메서드를 제공합니다.

.parent: Path 객체의 parent 속성은 현재 경로의 부모 디렉토리, 즉 현재 파일이 위치한 디렉토리의 경로를 Path 객체로 반환합니다.

/ "abc.csv": Path 객체를 사용할 때, / 연산자를 사용하여 경로를 쉽게 결합할 수 있습니다. 이 경우 "abc.csv" 파일명이 현재 스크립트 파일이 있는 디렉토리의 경로에 추가됩니다.

 

주의할 점
이 코드는 스크립트 파일 내에서 사용될 때 의도대로 작동합니다. Jupyter Notebook이나 대화형 Python 세션(IPython, Python REPL 등)에서 __file__ 변수는 정의되지 않습니다. 대화형 환경에서는 __file__ 대신 실제 경로 문자열이나 다른 방법을 사용해야 합니다.

파일 경로를 생성하고 나면, 이 경로를 사용해 파일을 읽거나 쓸 수 있습니다. 예를 들어, pandas 라이브러리를 사용하여 CSV 파일을 읽어올 때 fpath를 활용할 수 있습니다.

 

아래 광고 클릭으로 보다 많은 정보를 나눌수 있는 큰힘이 됩니다.~!  

728x90

2. 위의 코드를 개선한 예제

여기서는 먼저 파일 경로의 존재 여부를 검증하고, 파일이 존재하지 않을 경우 로깅하는 방법을 추가합니다.

from pathlib import Path
import logging

# 로깅 설정
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

 

파일 경로 생성 및 검증

try:
    # 현재 스크립트와 같은 디렉토리에 있는 'abc.csv' 파일의 경로 생성
    fpath = Path(__file__).parent / "abc.csv"

    # 파일 경로 검증
    if fpath.exists() and fpath.is_file():
        # 파일 경로가 유효하면 로깅
        logging.info(f"파일 경로 '{fpath}'가 확인되었습니다.")
    else:
        # 파일이 존재하지 않으면 예외 발생
        raise FileNotFoundError(f"파일 '{fpath}'를 찾을 수 없습니다.")
except NameError:
    # __file__이 정의되지 않은 경우(대화형 환경 등)
    logging.error("__file__ 변수가 정의되지 않았습니다. 스크립트 파일 내에서 이 코드를 실행해야 합니다.")
except FileNotFoundError as e:
    # 파일이 존재하지 않는 경우
    logging.error(e)

코드 분석 아래 클릭 :

더보기

이 코드는 다음 단계를 수행합니다:

로깅 설정: 프로그램의 실행 정보를 로깅하기 위해 logging 모듈을 설정합니다. 이 예제에서는 기본 로깅 레벨을 INFO로 설정하고, 로그 메시지의 형식을 지정합니다.

파일 경로 생성: Path 객체를 사용하여 현재 스크립트 파일이 위치한 디렉토리에 "abc.csv" 파일의 경로를 생성합니다.

예외 처리 추가:
NameError: 대화형 환경에서 __file__이 정의되지 않은 경우를 처리합니다.
FileNotFoundError: 지정된 경로의 파일이 존재하지 않을 경우를 처리합니다. 파일이 존재하지 않으면 예외를 발생시키고, 해당 예외를 캐치하여 로깅합니다.
경로 검증: exists()와 is_file() 메서드를 사용하여 파일 경로가 실제로 존재하는 파일을 가리키는지 확인합니다. 유효한 경우 해당 경로에 대한 정보를 로깅합니다.

이렇게 개선된 코드는 파일 경로의 존재를 검증하고, 예상치 못한 상황(예: 파일 누락, 대화형 환경에서의 사용)에 대해 유용한 로깅 정보를 제공합니다. 이는 디버깅 과정을 효과적으로 지원하고, 코드의 견고성을 높여줍니다.

 

마무리

- 이번 포스팅은 __file__ 매소드 활용 방법에 대해 알아봤습니다.

 
 

궁금한 사항은 lution2@gmail.com로 문의사항  주시면 답변 드리겠습니다.
감사합니다.

 

 

728x90
반응형
728x90
반응형

 티스토리 

 

매직 키워드에 대해 알아봅시다.

 Dunder method , Double UnderScore, Magic keyword, Special methods 라고도 불리기도 하지만, 
공식 문서에서는 special method라고 사용되네요.

1. 예제 모음 코드 리뷰

__init__  :
__init__ 메서드는 파이썬의 매직 메서드(또는 스페셜 메서드) 중 하나로, 클래스의 인스턴스가 생성될 때 자동으로 호출되는 생성자 함수입니다. 이 메서드는 인스턴스가 가지고 있어야 할 초기 상태를 설정하는 데 주로 사용됩니다.

class MyClass:
    def __init__(self, value1, value2):
        self.attribute1 = value1
        self.attribute2 = value2

# MyClass의 인스턴스 생성 시, __init__ 메서드가 자동으로 호출됩니다.
my_instance = MyClass("Hello", 123)
print(my_instance.attribute1)  # 출력: Hello
print(my_instance.attribute2)  # 출력: 123

위의 예제 코드 리뷰는 아래 클릭 :

더보기

__init__ 메서드는 첫 번째 매개변수로 인스턴스 자기 자신을 의미하는 self를 반드시 포함해야 합니다. 그 뒤에는 클래스 인스턴스화 시 필요한 추가 매개변수를 정의할 수 있습니다.

 

__str__: 인스턴스를 문자열로 변환할 때의 동작을 정의합니다. print() 함수나 str()에 객체를 전달했을 때 호출됩니다.

class MyClass:
    def __init__(self, name):
        self.name = name
        
    def __str__(self):
        return f"MyClass 인스턴스의 이름은 {self.name}입니다."

my_instance = MyClass("Test")
print(my_instance)

 

__repr__: 인스턴스의 부모 객체 이름을 확인합니다. 주로 디버깅과 로깅 목적으로 사용됩니다.

class MyClass:
    def __init__(self, name):
        self.name = name
        
    def __repr__(self):
        return f'MyClass("{self.name}")'

my_instance = MyClass("Test")
print(repr(my_instance))

실행 결과 아래 클릭

더보기

부모 객체와 입력한 argument 값이 출려 되는걸 알수 있다.

 

__len__: 컨테이너 타입의 길이를 반환합니다. len() 함수가 호출될 때 실행됩니다.

class MyContainer:
    def __init__(self, data):
        self.data = data
        
    def __len__(self):
        return len(self.data)

container = MyContainer([1, 2, 3, 4])
print(len(container))

실행 결과 값은 아래 클릭 :

 

__getitem__: 컨테이너 타입에서 항목을 가져올 때의 동작을 정의합니다.

class MyContainer:
    def __init__(self, data):
        self.data = data
        
    def __getitem__(self, key):
        return self.data[key]

container = MyContainer(["a", "b", "c"])
print(container[1])  # 출력: b

 

이러한 스페셜 메서드를 사용함으로써 파이썬 클래스의 동작을 매우 유연하게 커스터마이징할 수 있습니다. 클래스를 더 풍부하고 파이썬스럽게 만들고 싶다면, 이러한 메서드들을 적극적으로 활용해보세요.

 

728x90

 

마무리

- 이번 포스팅은 special method, magic method, 매직 매소드..에 대해 알아봤습니다.

 
 

궁금한 사항은 lution2@gmail.com로 문의사항  주시면 답변 드리겠습니다.
감사합니다.

 

 

728x90
반응형
728x90
반응형

 티스토리 

 

.7z format을 지원하는 라이브러리

7z 압축 포맷은 고압축률로 잘 알려져 있으며, 파이썬에서 이 포맷을 다루기 위해 여러 서드파티 라이브러리가 개발되었습니다. 주요 7z 파일 처리용 라이브러리와 각각의 특징을 아래에 소개하고, 사용 상황에 따른 추천을 드리겠습니다.

1. 코드리뷰


실무에서 매우 유용하게 쓰이는 코드이며, 관련 앱 개발에 필수로 고려해야 될 사항으로 생각 되네요.

이 코드들을 작성하기 전에, py7zr 라이브러리가 설치되어 있어야 합니다. 설치가 필요한 경우, pip install py7zr 명령어로 설치할 수 있습니다.
# 필요한 코드를 Python Code Interpreter에서 작성 및 최적화합니다.

# 1. 기본적인 압축 파일 생성
import py7zr

def create_archive(archive_name, file_paths):
    with py7zr.SevenZipFile(archive_name, 'w') as archive:
        for file_path in file_paths:
            archive.writeall(file_path, arcname=None) # arcname을 None으로 설정하면 파일 경로에서 마지막 부분을 사용

# 2. 압축 파일 해제
def extract_archive(archive_name, output_path):
    with py7zr.SevenZipFile(archive_name, 'r') as archive:
        archive.extractall(path=output_path)

# 3. 파일 목록 조회
def list_archive_contents(archive_name):
    with py7zr.SevenZipFile(archive_name, 'r') as archive:
        return archive.getnames()

# 4. 암호화된 압축 파일 생성
def create_encrypted_archive(archive_name, file_paths, password):
    with py7zr.SevenZipFile(archive_name, 'w', password=password) as archive:
        for file_path in file_paths:
            archive.writeall(file_path, arcname=None)

# 5. 여러 폴더를 개별 압축 파일로 생성
def create_multiple_archives(folder_paths):
    for folder_path in folder_paths:
        archive_name = f"{folder_path}.7z"
        with py7zr.SevenZipFile(archive_name, 'w') as archive:
            archive.writeall(folder_path, arcname=None)

# 함수 호출은 주석 처리하여 실행 방지
# create_archive('example.7z', ['file1.txt', 'file2.txt'])
# extract_archive('example.7z', 'output_folder')
# contents = list_archive_contents('example.7z')
# create_encrypted_archive('encrypted.7z', ['file1.txt', 'file2.txt'], 'password')
# create_multiple_archives(['folder1', 'folder2'])

 

아래 클릭후 추가 리뷰 내용 확인

더보기

py7zr.SevenZipFile을 사용할 때 with 문을 사용하는 구체적인 이유는 다음과 같습니다:  


- with 문을 사용하는 주된 이유는 리소스 관리입니다. 특히, 파일 작업을 할 때 with 문을 사용하면 파일을 열고 나서    작업이 완료되면 자동으로 파일을 닫아주기 때문에 매우 유용합니다. 이는 파일 핸들 누수를 방지하고 코드를 더        안전하게 만들어줍니다.

자동 리소스 해제: with 문은 context manager 프로토콜을 사용합니다. py7zr.SevenZipFile 클래스는 이 프로토콜을 구현하며, with 블록의 실행이 끝날 때 자동으로 close() 메서드를 호출합니다. 이는 열린 압축 파일이 안전하게 닫히도록 보장하며, 모든 데이터가 올바르게 기록되고 버퍼가 비워지는 것을 확실하게 합니다.

예외 처리: 파일 작업 중에 예외가 발생할 경우, with 문은 예외를 적절히 처리할 수 있는 구조를 제공합니다. 즉, 예외가 발생하더라도 SevenZipFile 객체의 close() 메서드가 호출되어 리소스가 제대로 해제됩니다. 이는 파일이나 다른 시스템 리소스가 잠기는 상황을 방지합니다.

코드의 가독성: with 문을 사용하면 리소스 관리 로직을 명시적으로 보여주지 않아도 됩니다. 코드를 읽는 사람은 with 블록 내에서 열린 리소스가 블록을 벗어나는 순간 안전하게 해제될 것이라는 것을 알 수 있으므로, 코드의 의도를 더 쉽게 파악할 수 있습니다.

결론적으로, with py7zr.SevenZipFile('your_large_file.7z', mode='r') as z: 구문을 사용함으로써, .7z 파일을 열고 작업 후 자동으로 닫으며, 이 과정에서 발생할 수 있는 예외를 관리하고, 코드의 안정성과 가독성을 향상시키는 이점을 얻을 수 있습니다.

 

 

반응형

2. 함수별 코드리뷰

  1. create_archive: 지정된 파일이나 폴더들을 .7z 파일로 압축합니다. 여기서 file_paths는 압축하고자 하는 파일 경로의 리스트입니다.
  2. extract_archive: .7z 파일을 지정된 경로에 해제합니다. archive_name은 해제하고자 하는 .7z 파일의 이름이며, output_path는 파일이 해제될 경로입니다.
  3. list_archive_contents: .7z 압축 파일 내의 파일 목록을 조회합니다. 파일 목록은 파일 이름의 리스트로 반환됩니다.
  4. create_encrypted_archive: 비밀번호를 사용하여 파일이나 폴더들을 암호화된 .7z 파일로 압축합니다. password 파라미터를 통해 암호화에 사용될 비밀번호를 설정할 수 있습니다.
  5. create_multiple_archives: 주어진 폴더들 각각을 별도의 .7z 파일로 압축합니다. 각 폴더 이름에 기반하여 압축 파일 이름이 결정됩니다.
이 코드는 py7zr 라이브러리가 설치된 Python 환경에서 실행할 수 있으며, 필요에 따라 코드를 수정하여 다른 상황에 맞게 사용할 수 있습니다. 코드의 사용 예제나 추가적인 기능이 필요한 경우, 질문해 주세요. ​

 

 

728x90

마무리

- 이번 포스팅은 py7zr 라이브러리 사용하는 방법에 대해 알아봤습니다.

- 7z 압축 포맷은 고압축률로 잘 알려져 있으며, 파이썬에서 이 포맷을 다루기 위해 여러 서드파티 라이브러리가 개발되었습니다. 주요 7z 파일 처리용 라이브러리와 각각의 특징을 아래에 소개하고, 사용 상황에 따른 추천을 드리겠습니다.

1. py7zr
특징: 파이썬에서 7z 압축 포맷을 직접적으로 다룰 수 있는 가장 대표적인 라이브러리입니다. LZMA와 LZMA2 압축 알고리즘을 지원하며, 파일 압축, 압축 해제, 암호화, 복수 볼륨 처리 등 다양한 기능을 제공합니다.
적합한 사용 상황: 고압축률을 요구하는 다양한 프로젝트에서 7z 파일을 생성하거나 압축 해제할 필요가 있을 때.
2. libarchive
특징: libarchive는 다양한 압축 포맷을 지원하는 C 라이브러리이며, 파이썬에서는 python-libarchive를 통해 사용할 수 있습니다. 7z 포맷을 포함하여 tar, rar 등 여러 압축 포맷을 지원합니다.
적합한 사용 상황: 다양한 압축 포맷을 하나의 라이브러리에서 지원받고 싶을 때, 특히 다양한 타입의 압축 파일을 처리해야 하는 경우.
3. PyLZMA
특징: LZMA 압축 알고리즘에 초점을 맞춘 라이브러리로, 7z 파일 내의 LZMA 압축을 사용한 파일들을 처리할 수 있습니다. 비록 7z 포맷의 모든 기능을 지원하지는 않지만, LZMA 알고리즘을 사용하는 파일에 대해서는 좋은 성능을 제공합니다.
적합한 사용 상황: LZMA 압축에 특화된 작업을 할 때, 특히 7z 파일 내의 LZMA 압축된 내용을 다루고 싶을 때.
추천
대부분의 경우, py7zr를 추천합니다. 이 라이브러리는 7z 파일 포맷에 대한 광범위한 지원을 제공하며, 파이썬 생태계 내에서 가장 널리 사용되고 있습니다. 사용하기 쉬운 API와 고압축률, 다양한 기능을 제공하기 때문에 대부분의 7z 관련 작업에 적합합니다.

다만, 프로젝트에서 다양한 압축 포맷을 동시에 다뤄야 한다면, libarchive를 고려할 수 있습니다. 이 라이브러리는 여러 압축 포맷에 대한 지원을 제공하므로, 하나의 라이브러리로 여러 작업을 처리할 수 있는 유연성을 제공합니다.

각 라이브러리의 설치와 사용 방법은 다음과 같습니다:

py7zr 설치: pip install py7zr
python-libarchive 설치: pip install libarchive
PyLZMA 설치: pip install pylzma
프로젝트 요구 사항과 환경에 맞는 라이브러리를 선택하여 고효율적인 압축 작업을 수행할 수 있습니다.
 
 

궁금한 사항은 lution2@gmail.com로 문의사항  주시면 답변 드리겠습니다.
감사합니다.

 

 

728x90
반응형
728x90
반응형

 티스토리 

 

개요

PyCharm을 설치하는 과정은 몇 가지 단계로 나눌 수 있으며, 이 과정은 대부분의 운영 체제에서 유사합니다. PyCharm은 JetBrains에서 개발한 Python 개발을 위한 인기 있는 IDE(통합 개발 환경)입니다. Professional Edition(유료)과 Community Edition(무료)의 두 가지 버전이 있습니다. 여기서는 Community Edition을 설치하는 기본 단계를 설명하겠습니다.

1. PyCharm 다운로드


JetBrains의 공식 웹사이트 아래 한국어 버젼 기준 
https://www.jetbrains.com/ko-kr/pycharm/
운영 체제에 맞는 PyCharm 버전을 선택합니다 (Windows, macOS, Linux).
Community Edition을 선택하여 무료 버전을 다운로드합니다.


설치 프로그램 실행:

다운로드한 설치 파일을 실행합니다.
Windows의 경우, 설치 마법사가 나타나면 지시사항을 따릅니다. macOS의 경우, dmg 파일을 열고 PyCharm 아이콘을 Applications 폴더로 드래그합니다. Linux의 경우, tar.gz 파일을 압축 해제하고 제공된 스크립트로 설치를 진행할 수 있습니다.

\

설치후 임포트는 처음이니 따로 건들게 없음.

 

반응형

2. 설정 및 초기 구성

설정 및 초기 구성

설치가 완료되면 PyCharm을 처음 실행할 때 몇 가지 초기 설정을 진행할 수 있습니다. 예를 들어, UI 테마를 선택하고, 필요한 플러그인을 설치하고, 개발 환경을 구성할 수 있습니다.

새 프로젝트 만들기 또는 기존 프로젝트 열기:

PyCharm을 처음 시작하면 새 프로젝트를 만들거나 기존 프로젝트를 열 수 있는 환영 화면이 표시됩니다.
새 프로젝트를 시작하려면 "New Project"를 선택합니다. 여기서 프로젝트의 이름, 위치, 사용할 Python 인터프리터를 설정할 수 있습니다.
환경 구성 및 의존성 관리:

 

Get From VCS 는 작업한 이력들을 자동으로 관리 해주는 기능이며, 처음 초보자라면 일단 무시하시고 나중에 다시 공부 하자!

환경 설정 옵션은 빨간 표시 참고 

테마는 저는 어두운게 좋아서 저렇게 사용합니다~ 원하는데로 골라서 적용해보세요.

 
프로젝트 설정에서 Python 인터프리터를 선택하고 필요한 경우 가상 환경을 구성할 수 있습니다.
필요한 외부 라이브러리나 패키지는 PyCharm의 내장 패키지 관리자를 사용하여 설치할 수 있습니다.

플러그인 종

 

 

python interpreter - add Local ... -> System interprter에서 내가 설치한 python경로에 python.exe를 선택.

 

개발 시작:

이제 PyCharm에서 코드를 작성, 실행 및 디버깅할 준비가 완료되었습니다. PyCharm의 강력한 코드 완성, 버전 관리 통합, 리팩토링 도구 등을 활용하여 효율적으로 개발할 수 있습니다.
PyCharm을 처음 사용하는 경우, 공식 문서와 튜토리얼(https://www.jetbrains.com/pycharm/learn/)을 참고하여 다양한 기능과 작업 흐름에 익숙해지는 것이 좋습니다. PyCharm은 Python 개발자에게 매우 유용한 도구이며, 이를 통해 개발 프로세스를 크게 향상시킬 수 있습니다.

 

파이참 계정 가입 :


PyCharm을 설치하고 계정에 가입하는 것은 여러 이점을 제공합니다. PyCharm은 JetBrains에서 개발한 강력한 Python IDE(통합 개발 환경)로, 효율적인 코드 개발을 돕기 위해 다양한 기능을 제공합니다. 계정에 가입함으로써 얻을 수 있는 주요 이점은 다음과 같습니다:

라이선스 관리: JetBrains 계정을 통해 사용자는 구매한 라이선스를 쉽게 관리할 수 있습니다. 이는 다양한 기기에서 PyCharm을 사용하고자 할 때 특히 유용합니다.

설정 동기화: 계정을 통해 PyCharm의 개인 설정과 환경을 클라우드에 저장하고, 다른 기기에서도 동일한 설정을 적용할 수 있습니다. 이는 여러 컴퓨터를 사용하는 개발자에게 매우 편리한 기능입니다.

제품 업데이트: JetBrains 계정을 통해 PyCharm을 포함한 JetBrains 제품의 최신 업데이트와 정보를 받을 수 있습니다. 새로운 기능이나 버그 수정 사항을 빠르게 확인하고 적용할 수 있습니다.

교육 자료 및 리소스 접근: JetBrains 계정 사용자는 다양한 교육 자료와 리소스에 접근할 수 있습니다. 이는 Python 및 다른 프로그래밍 언어에 대한 학습을 돕는 데 유용할 수 있습니다.

커뮤니티 참여: 계정을 통해 JetBrains의 커뮤니티에 참여하고, 다른 개발자와 지식을 공유하며, 피드백을 주고받을 수 있습니다. 이는 개발 역량을 향상시키는 데 도움이 됩니다.

PyCharm은 개인 사용자를 위한 무료 Community Edition과 더 많은 기능을 제공하는 유료 Professional Edition을 제공합니다. 계정을 가입하면 어느 에디션을 사용하든지 간에 이러한 이점을 누릴 수 있습니다. 또한, 특정 조건(예: 학생, 교육 기관)에 해당되는 경우, JetBrains의 모든 개발 도구를 무료로 사용할 수 있는 기회도 얻을 수 있습니다.

728x90

 

마무리

- 이번 포스팅은 Pycharm 설치에 대해 알아봤습니다.

CostZeroCode

 
 
 

궁금한 사항은 lution2@gmail.com로 문의사항  주시면 답변 드리겠습니다.
감사합니다.

 

 

728x90
반응형
728x90
반응형

 티스토리 

 

예외 처리 - try-except

파이썬의 try-except 구문은 예외 처리를 위해 사용됩니다. 예외 처리는 프로그램 실행 중에 발생할 수 있는 오류(예외)를 처리하여 프로그램이 중단되지 않고 계속 실행될 수 있도록 하는 기능입니다. 이러한 처리는 프로그램의 안정성과 사용자 경험을 향상시키는 데 중요합니다.

1. 코드리뷰

try:
    # 오류가 발생할 가능성이 있는 코드
except 예외유형 as 변수명:
    # 예외 처리 코드
try:
    x = 5
    y = 0
    result = x / y
except ZeroDivisionError:
    print("0으로 나눌 수 없습니다.")

이 코드는 y가 0이므로, ZeroDivisionError 예외가 발생합니다except 블록이 이를 캐치하고 "0으로 나눌 수 없습니다."를 출력합니다.

 

반응형

2. 다양한 예외 처리

try:
    # 코드
except (RuntimeError, TypeError, NameError):
    # 여러 예외 처리

else와 finally
else 블록: 모든 except 블록이 실행되지 않을 때 실행됩니다. 즉, 예외가 발생하지 않았을 때 실행할 코드를 담습니다.
finally 블록: 예외 발생 여부와 관계없이 항상 실행됩니다. 주로 리소스 해제 등의 정리 작업에 사용됩니다.

try:
    print("try 블록 실행")
except Exception as e:
    print(f"예외 발생: {e}")
else:
    print("예외가 발생하지 않았습니다.")
finally:
    print("항상 실행되는 finally 블록")

 

2. 파일처리

파일을 다룰 때 발생할 수 있는 예외를 처리하는 방법입니다. 파일이 존재하지 않을 때 FileNotFoundError 예외가 발생합니다.

try:
    with open('non_existent_file.txt', 'r') as f:
        content = f.read()
except FileNotFoundError:
    print("파일을 찾을 수 없습니다.")

사용자 입력 처리
사용자 입력을 처리하면서 발생할 수 있는 ValueError를 처리하는 예제입니다. 사용자가 숫자가 아닌 다른 값을 입력했을 때 이를 처리합니다.

더보기

try:
    user_input = int(input("숫자를 입력하세요: "))
    print(f"입력한 숫자는 {user_input}입니다.")
except ValueError:
    print("숫자가 아닌 값을 입력하였습니다. 숫자를 입력해주세요.")

리스트 인덱스 처리

리스트에서 발생할 수 있는 IndexError 예외를 처리하는 방법입니다. 사용자가 리스트의 범위를 벗어나는 인덱스에 접근하려 할 때 이를 처리합니다.

더보기

my_list = [1, 2, 3]

try:
    print(my_list[5])
except IndexError:
    print("리스트의 범위를 벗어난 인덱스에 접근하려고 했습니다.")

복수의 예외 처리

하나의 try 블록에서 여러 유형의 예외를 처리하는 방법입니다. 이는 다양한 오류 상황을 하나의 코드 블록에서 처리할 수 있게 해줍니다.

try:
    # 다양한 예외 발생 가능성이 있는 코드
    # 예를 들어, 0으로 나누기 시도 또는 잘못된 타입의 연산 시도
    result = 1 / 0
except (ZeroDivisionError, TypeError) as e:
    print(f"오류 발생: {e}")

728x90

이러한 예제들은 기본적인 사용법부터 복잡한 상황에서의 예외 처리 방법까지 다양한 시나리오를 보여주며, 블로그 독자들이 try-except 구문을 이해하고 자신의 프로젝트에 적용하는 데 도움이 될 것입니다.

마무리

- 이번 포스팅은 try-except  예외 처리 구문에 대해 알아봤습니다.

 
 

궁금한 사항은 lution2@gmail.com로 문의사항  주시면 답변 드리겠습니다.
감사합니다.

 

 

728x90
반응형
728x90
반응형

 티스토리 

 

입력받은 decimal을 binary 값으로 출력

아래 convert  재귀함수를 만들어 입력받은 숫자를 이진수로 변환하는 프로그램을 만들기 위해서는 사용자 입력 메커니즘을 구현하고 convert 함수가 재귀 오류를 피하기 위해 기본 경우(base case)를 제대로 처리하도록 해야 합니다. 여기에 원래의 convert 함수를 수정하여 기본 경우를 포함한 종합적인 해결책을 제공합니다.

1. 코드리뷰

def convert(num):
    # 기본 경우: num이 0이나 1일 때, 이진수 표현으로 num을 직접 반환할 수 있습니다.
    if num == 0:
        return 0
    else:
        # 재귀적으로 convert를 호출하여 이진 숫자를 끝(가장 낮은 비트)에서 시작으로 구성합니다.
        return (num % 2 + 10 * convert(num // 2))

# 사용자로부터 숫자를 입력받기 위한 입력 메커니즘.
try:
    num = int(input("이진수로 변환할 숫자를 입력하세요: "))
    # 숫자가 음수가 아닌지 확인합니다.
    if num < 0:
        print("양의 정수를 입력해주세요.")
    else:
        binary_representation = convert(num)
        print(f"{num}의 이진 표현은: {binary_representation}입니다.")
except ValueError:
    # 입력값이 정수가 아닌 경우를 처리합니다.
    print("유효한 정수를 입력해주세요.")

아래 클릭하여 추가 리뷰 확인

더보기

이 스크립트는 다음과 같은 작업을 수행합니다:

convert 함수를 기본 경우를 적절히 처리하여 무한 재귀를 피하도록 정의합니다. 기본 경우는 num이 0일 때, 더 이상의 호출 없이 직접 0을 반환하는 것입니다.
입력을 안전하게 정수로 변환하려고 시도하는 try-except 블록을 사용합니다. 사용자가 정수가 아닌 것을 입력하면 유효한 정수를 입력하라는 메시지를 출력합니다.
변환을 시도하기 전에 사용자 입력이 음수가 아닌 정수인지 확인합니다. 이 간단한 재귀 함수는 음수의 이진 표현을 처리하지 않습니다.
사용자의 입력으로 convert 함수를 호출하고 이진 표현을 출력합니다.
이 접근 방식은 프로그램이 견고하도록 보장하며, 유효하지 않은 입력을 우아하게 처리하고 사용자를 안내하기 위한 명확한 메시지를 제공합니다.

 

반응형

 

마무리

- 이번 포스팅은 십진수를 2진수로 변환하는 방법에 대해 알아봤습니다.

 
 

궁금한 사항은 lution2@gmail.com로 문의사항  주시면 답변 드리겠습니다.
감사합니다.

 

 

728x90
반응형
728x90
반응형

 티스토리 

 

특정 문자열을 포함하는 데이터를 탐색

안녕하세요, 
오늘의 블로그 포스팅에서는 Python의 Pandas 라이브러리를 활용하여 특정 문자열을 포함하는 데이터를 탐색하고 이를 기반으로 새로운 열을 데이터프레임에 추가하는 방법을 알아보겠습니다.

이번 예제에서특정 문자열을 찾아내는 것을 목표로 합니다.

1. 코드리뷰

데이터프레임 준비
먼저, 우리가 작업할 샘플 데이터프레임을 생성해보겠습니다.

데이터프레임에는 날짜(DATE), 선수 이름(PLAYER), 출생년도(Birth), 소속 클럽(TEAM), 그리고 데이터베이스 ID(DB_ID)가 포함됩니다.

import pandas as pd

# 데이터프레임 수정
data = {
    'DATE': ['2023-10-13 0:00:00', '2023-10-14 1:00:00', '2023-10-15 2:00:00', 
             '2024-01-16 3:00:00', '2024-01-17 4:00:00', '2024-01-18 5:00:00', 
             '2024-01-18 6:00:00', '2024-01-18 7:00:00', '2024-01-18 8:00:00'],
    'PLAYER': ['손흥민(Son Heung-min)', '이강인(Lee Kang-in)', '김민재(Kim Min-jae)', 
               '황희찬(Hwang Hee-chan)', '박지성(Park Ji-sung)', '기성용(Ki Sung-yueng)', 
               '차범근(Cha Bum-kun)', '차두리(Cha Du-ri)', '이청용(Lee Chung-yong)'],
    'Birth': ['1992년 7월 8일', '2001년 2월 19일', '1996년 11월 15일', 
              '1996년 1월 26일', '1981년 2월 25일', '1989년 1월 24일', 
              '1953년 5월 22일', '1980년 7월 25일', '1988년 7월 2일'],
    'TEAM': ['Tottenham Hotspur', 'PSG', 'FC Bayern Munich', 
               'Wolverhampton Wanderers FC', 'Manchester United', 'THE CELTIC FC', 
               '프랑크푸르트', '프랑크푸르트', '볼턴 원더러스'],
    'DB_ID': ['CI13/JO_DATA/TZ10', 'CI07/JO_DATA/TZ10', 'CI13//TZ10', 
              'SI_DATA/TZ10', 'CI3/JO_DATA/TZ12', 'CI13/JO_DATA', 
              'CI13/SI_DATA/TZ10', 'CI77/JO_DATA/TZ10', 'SI_DATA/TZ10']
}
df = pd.DataFrame(data)
df.to_csv('result.csv') # 결과 저장

특정 문자열 탐색 및 새 열 추가

이제 'DB_ID' 열에서 'JO_DATA' 문자열을 포함하는 행을 찾아, 이 정보를 바탕으로 새로운 열 'CHECK_ID'에 'JO_DATA'를 저장하는 작업을 진행하겠습니다. 이를 위해 apply 함수와 람다(lambda) 표현식을 사용합니다.

df.apply() 메소드 와 람다(lambda)는 아래에 다시 자세히 설명 하겠습니다.

df['CHECK_ID'] = df['PLACE'].apply(lambda x: 'JO_DATA' if 'JO_DATA' in x else None)

결과 (output) : CHECK_ID 열에 DB_ID 값 JO_DATA가 있으면 저장한 결과

 

2. apply 함수와 람다(lambda) 표현식

DataFrame.apply() 메소드는 판다스(Pandas)에서 데이터프레임의 열이나 행에 함수를 적용할 때 사용합니다. 
이 메소드는 데이터프레임의 각 열이나 행에 대해 지정된 함수를 적용하고 결과를 데이터프레임 또는 시리즈로 반환합니다.
 axis 매개변수를 통해 함수가 적용되는 축을 지정할 수 있으며, axis=0은 열에 함수를 적용하고, axis=1은 행에 함수를 적용합니다.

예제 1: 열의 최대값과 최소값의 차이 계산

import pandas as pd

df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]})

def max_min_diff(x):
    return x.max() - x.min()

result = df.apply(max_min_diff)
print(result)

결과 : 

A    2
B    2
C    2

예제 2: 행별로 최대값 찾기

import pandas as pd

df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]})

result = df.apply(max, axis=1)
print(result)

결과 :

0    7
1    8
2    9

예제 3: 데이터프레임의 각 열에 대해 데이터 유형 변환

import pandas as pd

df = pd.DataFrame({'A': [1, 2, 3], 'B': ['4', '5', '6'], 'C': [0.1, 0.2, 0.3]})

def convert_dtype(x):
    if x.dtype == 'float64':
        return x.astype('int64')
    return x

result = df.apply(convert_dtype)
print(result)

결과 :

   A  B  C
0  1  4  0
1  2  5  0
2  3  6  0

이 예제들은 apply() 메소드의 다양한 사용 방법을 보여줍니다. 첫 번째 예제는 각 열의 최대값과 최소값의 차이를 계산합니다. 두 번째 예제는 각 행의 최대값을 찾습니다. 세 번째 예제에서는 데이터프레임의 각 열의 데이터 유형을 조건에 따라 변환합니다.

파이썬의 lambda 함수는 작은 익명 함수를 정의하는 데 사용됩니다. lambda 함수는 여러 인자를 받을 수 있지만, 표현식은 하나만 가질 수 있으며, 그 표현식의 계산 결과가 반환됩니다. lambda 함수는 일반적으로 함수를 인자로 받는 고차 함수에서 사용되거나, 짧은 함수가 필요한 곳에 쓰이는 경우가 많습니다. 기본 형식은 다음과 같습니다.

lambda arguments: expression

예제 1: 두 수를 더하는 lambda 함수

add = lambda x, y: x + y
print(add(5, 3))

예제 2: 리스트의 각 요소에 제곱을 적용

numbers = [1, 2, 3, 4]
squared = list(map(lambda x: x ** 2, numbers))
print(squared)

예제 3: 리스트에서 홀수만 필터링

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
odds = list(filter(lambda x: x % 2 != 0, numbers))
print(odds)

이 예제들은 lambda 함수의 다양한 사용 방법을 보여줍니다. 첫 번째 예제는 두 수를 더하는 간단한 lambda 함수를 정의합니다. 두 번째 예제에서는 map() 함수와 lambda를 결합하여 리스트의 각 요소에 제곱을 적용합니다. 세 번째 예제에서는 filter() 함수와 lambda를 사용하여 리스트에서 홀수만을 필터링합니다.

마무리

- 이번 포스팅은 판다스 조건별 탐색 및 apply() 메소드 및 lambda에 대해 알아봤습니다.

 

궁금한 사항은 댓글을 통해서 남겨 주시면 답변 드리겠습니다.
감사합니다.

 

 

728x90
반응형

+ Recent posts