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
반응형

 티스토리 

 

딕셔너리

파이썬 딕셔너리는 키와 값의 쌍으로 이루어진 자료 구조입니다. 키는 고유해야 하며, 값은 어떠한 자료형도 될 수 있습니다.
딕셔너리를 생성하려면 다음과 같은 방법을 사용할 수 있습니다.

1. 코드리뷰

 딕셔너리를 생성하려면 다음과 같은 방법을 사용할 수 있습니다.

Python
# 빈 딕셔너리 생성
dict()

# 키와 값의 쌍으로 딕셔너리 생성
{'key1': 'value1', 'key2': 'value2'}

# 반복 가능한 객체를 사용하여 딕셔너리 생성
dict(zip(['key1', 'key2'], ['value1', 'value2']))
코드를 사용할 때는 주의하시기 바랍니다. 자세히 알아보기
content_copy

딕셔너리의 키와 값에 접근하려면 다음과 같은 방법을 사용할 수 있습니다.

Python
# 키로 값을 가져오기
dict['key1']

# 키가 존재하는지 확인하기
'key1' in dict

# 키의 값을 변경하기
dict['key1'] = 'new_value'

# 키를 삭제하기
del dict['key1']
코드를 사용할 때는 주의하시기 바랍니다. 자세히 알아보기
content_copy

딕셔너리를 순회하려면 다음과 같은 방법을 사용할 수 있습니다.

Python
# 키를 순회하기
for key in dict:
    print(key, dict[key])

# 값을 순회하기
for value in dict.values():
    print(value)

# 키와 값을 순회하기
for key, value in dict.items():
    print(key, value)
코드를 사용할 때는 주의하시기 바랍니다. 자세히 알아보기
content_copy

딕셔너리의 주요 메서드는 다음과 같습니다.

  • keys(): 딕셔너리의 키를 가져옵니다.
  • values(): 딕셔너리의 값을 가져옵니다.
  • items(): 딕셔너리의 키와 값을 튜플로 가져옵니다.
  • get(key, default=None): 지정된 키의 값을 가져옵니다. 키가 존재하지 않으면 default 값을 반환합니다.
  • setdefault(key, default=None): 지정된 키의 값을 가져옵니다. 키가 존재하지 않으면 default 값을 설정하고, 키의 값을 반환합니다.
  • update(dict2): 다른 딕셔너리의 값을 병합합니다.
  • pop(key, default=None): 지정된 키의 값을 제거하고 값을 반환합니다. 키가 존재하지 않으면 default 값을 반환합니다.
  • popitem(): 임의의 키와 값의 쌍을 제거하고 쌍을 반환합니다.
  • clear(): 딕셔너리의 모든 항목을 제거합니다.

파이썬 딕셔너리는 다양한 용도로 사용할 수 있습니다. 예를 들어, 다음과 같은 용도로 사용할 수 있습니다.

  • 데이터 저장: 사용자 정보, 제품 정보, 설정 정보 등을 저장할 수 있습니다.
  • 검색: 키로 값을 검색할 수 있습니다.
  • 그룹핑: 키로 데이터를 그룹핑할 수 있습니다.

파이썬 딕셔너리를 사용하여 코드를 더 간결하고 효율적으로 작성할 수 있습니다.

마무리

- 이번 포스팅은 딕셔너리(dictionary) 타입에 대해 알아봤습니다.

 

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

 

 

728x90
반응형
728x90
반응형

 티스토리 

 

[Python/파이썬] 리스트/LIST들 중에서 중복된 값 찾기

여러 리스트들 중에서 중복된 값들만 찾아보자.

def find_duplicates(list1, list2):
    return list(set(list1) & set(list2))

# 예시 리스트
list1 = [1, 2, 3, 4, 5]
list2 = [3, 4, 5, 6, 7]

duplicates = find_duplicates(list1, list2)
print("중복된 값:", duplicates)

아래는 중복된 값들을 순서대로 저장하기 위한 추가 방법.

def find_ordered_duplicates(list1, list2):
    duplicates = []
    for item in list1:
        if item in list2 and item not in duplicates:
            duplicates.append(item)
    return duplicates

# 예시 리스트
list1 = [1, 2, 3, 4, 5]
list2 = [3, 4, 5, 6, 7]

ordered_duplicates = find_ordered_duplicates(list1, list2)
print("중복된 값 (순서대로):", ordered_duplicates)

마무리

- 위의 코드에서는 set 자료형을 활용하여 각 리스트의 중복되지 않은 값들을 모두 제거하고, 그 후에 교집합 연산자 &를 사용하여 두 집합의 공통된 요소를 찾습니다. 이를 통해 중복된 값을 찾을 수 있습니다.
단, 이 방법은 중복된 값들을 순서대로 보존하지 않습니다. 중복된 값들을 보존하며 어떤 작업을 수행하려면 더 많은 로직이 필요할 수 있습니다.

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

 

 

728x90
반응형
728x90
반응형

`glob` 모듈은 특정 패턴과 일치하는 파일 및 디렉터리를 찾기 위해 사용되는 Python 모듈입니다. 이 모듈은 Unix 셸에서 사용되는 와일드카드 패턴과 유사한 방식으로 파일을 검색하고 이름을 가져오는 편리한 방법을 제공합니다.

`glob` 모듈을 사용하려면 먼저 import해야 합니다:

```python

import glob

```

다음은 `glob` 모듈의 사용법을 설명하는 몇 가지 예시입니다:

1. 디렉터리에서 모든 Python 파일 가져오기: ```python

import glob

python_files = glob.glob('*.py') print(python_files)

```

이 코드는 현재 디렉터리에서 확장자가 `.py`인 모든 파일을 찾아서 `python_files` 리스트에 이름을 저장합니다.

2. 디렉터리와 하위 디렉터리에서 모든 파일 찾기:

```python

import glob

all_files = glob.glob('**', recursive=True) print(all_files)

```

이 코드는 현재 디렉터리와 그 하위 디렉터리에 있는 모든 파일의 이름을 가져옵니다. `**` 패턴은 임의의 중첩된 디렉터리 구조와 일치하며, `recursive=True`는 `glob`에게 재귀적으로 검색하도록 지시합니다.

3. 특정 디렉터리에서 모든 텍스트 파일 찾기:

```python

import glob

text_files = glob.glob('/경로/디렉터리/*.txt') print(text_files)

```

이 예시는 특정 디렉터리에서 확장자가 `.txt`인 모든 파일을 검색하는 방법을 보여줍니다. `/경로/디렉터리` 부분을 실제 디렉터리 경로로 대체해야 합니다.

4. 디렉터리에서 모든 하위 디렉터리 찾기: ```python

import glob

directories = glob.glob('/경로/디렉터리/*/') print(directories)

```

이 코드는 특정 디렉터리에서 모든 하위 디렉터리의 이름을 가져옵니다. `*/` 패턴은 임의의 디렉터리와 일치하며, `/경로/디렉터리` 부분을 실제 디렉터리 경로로 대체해야 합니다.

5. 여러 확장자를 기준으로 파일 필터링하기

```python

import glob

files = glob.glob('/경로/디렉터리/*.{txt,csv}') print(files)

```

이 예시에서는 `/경로/디렉터리`에서 확장자가 `.txt` 또는 `.csv`인 파일과 일치하는 `*.{txt,csv}` 패턴을 사용합니다.

이는 Python에서 `glob` 모듈을 사용하여 파일 및 디렉터리를 검색하는 방법에 대한 일부 예시입니다. `glob` 함수는 다양한 와일드카드 패턴과 옵션을 지원하므로 자세한 내용은 공식 Python 문서를 참조하시기 바랍니다: [https://docs.python.org/3/library/glob.html](https://docs.python.org/3/library/glob.html)

728x90
반응형

'PYTHON 파이썬 > 문법(Syntax)' 카테고리의 다른 글

[python] dictionary 딕셔너리  (0) 2024.01.15
[Python/파이썬] 리스트/LIST들 중에서 중복된 값 찾기  (0) 2023.08.05
input()  (0) 2023.06.18
조건문(Conditional Statement)  (0) 2023.06.17
변수(Variables)  (0) 2023.06.17
728x90
반응형

이썬에서 input 함수는 사용자로부터 텍스트나 값을 입력받는 데 사용됩니다. input 함수를 사용하면 프로그램이 사용자의 입력을 대기하고, 사용자가 값을 입력하면 그 값을 받아와서 변수에 저장할 수 있습니다. 다음은 파이썬에서 input 함수를 자세히 설명하는 내용입니다: 기본적인 사용:

input() 함수를 호출하여 사용자로부터 입력을 대기합니다.

사용자가 입력한 값을 프로그램으로 가져옵니다.

input 함수는 사용자의 입력을 문자열로 반환합니다.

입력 메시지 출력:

input 함수에 문자열 인자를 전달하여 사용자에게 입력할 값을 안내할 수 있습니다.

예: name = input("이름을 입력하세요: ") 입력 값 사용:

input 함수로 입력받은 값을 변수에 할당하여 나중에 사용할 수 있습니다.

예: age = input("나이를 입력하세요: ") 형 변환:

input 함수로 입력받은 값은 기본적으로 문자열입니다. 필요한 경우 이 값을 다른 자료형으로 변환해야 할 수 있습니다.

예: age = int(input("나이를 입력하세요: ")) 입력 값 검증:

입력 받은 값에 대한 검증을 수행할 수 있습니다. 조건문을 사용하여 입력 값을 확인하고, 잘못된 값이 입력된 경우 다시 입력을 요청할 수 있습니다.

예: while True: age = int(input("나이를 입력하세요: ")) if age >= 0: break else: print("잘못된 입력입니다. 다시 입력해주세요.") 입력 값 분할:

input 함수로 입력받은 문자열을 공백이나 다른 구분자를 기준으로 분할하여 여러 개의 변수에 할당할 수 있습니다.

예: name, age = input("이름과 나이를 입력하세요: ").split() 예시:

python

Copy code

name = input("이름을 입력하세요: ") age = int(input("나이를 입력하세요: ")) print("이름:", name)

print("나이:", age)

위와 같이 input 함수를 사용하면 사용자로부터 값을 입력받을 수 있습니다. 사용자의 입력을 받아와서 변수에 저장하여 다음 처리에 활용할 수 있습니다. 사용자와 상호작용하면서 프로그램을 개발하고 원하는 값을 입력받을 수 있습니다.

728x90
반응형
728x90
반응형

조건문은 프로그램이 특정 조건을 만족하는 경우에 따라 다른 코드 블록을 실행하도록 하는 구문입니다. 파이썬에서는 주로 if, elif, else 키워드를 사용하여 조건문을 작성합니다.

if 문:

if 문은 가장 기본적인 조건문입니다. 주어진 조건식이 참(True)인 경우에만 if 문 아래의 코드 블록이 실행됩니다.

python

Copy code

if 조건식:

코드 블록

조건식은 평가되어 참 또는 거짓을 반환하는 식이어야 합니다. 조건식이 참일 경우에는 코드 블록이 실행되고, 거짓일 경우에는 if 문을 건너뛰고 다음으로 진행됩니다.

if-else 문:

if-else 문은 if 문과 함께 사용되며, 조건식이 참일 때는 if 블록을 실행하고, 거짓일 때는 else 블록을 실행합니다.

python

Copy code

if 조건식:

코드 블록1

else:

코드 블록2

조건식이 참일 경우 코드 블록1이 실행되고, 거짓일 경우 코드 블록2가 실행됩니다.

if-elif-else 문: if-elif-else 문은 여러 개의 조건을 체크하고 해당하는 코드 블록을 실행하는데 사용됩니다. 여러 개의 elif(else if) 블록을 추가할 수 있습니다.

python

Copy code

if 조건식1:

코드 블록1

elif 조건식2:

코드 블록2

elif 조건식3:

코드 블록3

else:

코드 블록4

조건식1부터 순서대로 체크하며, 가장 먼저 참이 되는 조건식에 해당하는 코드 블록이 실행됩니다. 만약 어떤 조건식도 참이 아닌 경우 else 블록이 실행됩니다.

중첩 조건문:

조건문은 중첩될 수 있으며, if 문 안에 또 다른 if 문을 작성할 수 있습니다. 이를 통해 복잡한 조건을 다룰 수 있습니다.

python

Copy code

if 조건식1:

if 조건식2:

코드 블록1

else:

코드 블록2

else:

코드 블록3

조건식1이 참인 경우에는 조건식2를 체크하고, 조건식2도 참이면 코드 블록1이 실행됩니다. 조건식2가 거짓인 경우에는 코드 블록2가 실행됩니다. 조건식1이 거짓인 경우에는 코드 블록3이 실행됩니다.

728x90
반응형
728x90
반응형

변수는 값을 저장하기 위해 사용됩니다. 변수를 선언하고 값을 할당할 수 있습니다.

x = 5  # 변수 x에 5를 할당
y = "Hello"  # 변수 y에 문자열 "Hello"를 할당

728x90
반응형

+ Recent posts