ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [nr.7010] TD_sc : pathlib.Path.home // try~except
    영상 공부/코딩|모션_자료|정보 2024. 3. 4. 08:29

    내가 보려고 만든 페이지.

    보셔도 도움이 되지 못 합니다. 참고 부탁드립니다.

     

    1/7

    터미널 vim 복사기능

    vim. aa.text

    q --> a(시작하는 단축키) 레코딩(@a로 바뀐것을 알 수 있다.) --> a(쓰기) -> esc -> 다음 복사할 부분으로가서 q

    -> @a시작

     

     


    JPTpy 책 공부


    24 : s_path   ==  /home/rapa 파이썬실행시 경로 : python w03.py(파일명) /home/rapa(경로명)

    이 경로를 기준으로 glob 탐색 ** 모든 서브 디렉토리 /* 안에있는 파일(파일명 상관없음) .py 확장자가 파이썬인 파일들을 리스트로 다 담아서 for문으로 돌리고 있는 것이다.

     

    예를 들어 a.py, b.py, c.py, d.py ....가 검색되었다고 하면 처음에 a.py가 i에 들어가서 i의 경로가 i.as_posix()로 배치가 되어서 'r'로 읽어서 open으로 뱉어낸 객체 fp에 집어 넣고 fp.readlines로 읽는다 (readlines는 list이다 --> ['aaa','book','xxx'] -> book가 있으므로 find되어  찾았으니까 나가라 break가 되어 for 문으로 빠져 나가고 함수 종료되고 프로그램 나가고 // 만약 못 찾으면 다시 올라가서 b.py가 반복한다. 만약 c.py가 유니코드 에러가 걸린다면 try~except가 실행. -> as err로 알려주되 사용자에게는 알려주고 싶지 않으니까 pass로 무시하고 지나간 것임.)

     


    import pathlib
    
    home = pathlib.Path.home()
    
    print(home.as_posix(), type(home.as_posix()))
     
    result = '{0}/{1}'.format(home.as_posix(), 'result.txt')
    print(result)

     

    home 디렉토리에서 파일을 만들 때 쓰는 코드

     

     

    하단은 주피터에서 연습하고 가져옴.

    with open('/home/rapa/test/test.py', 'r') as fp1:
        fp1_lst = fp1.readlines()
    with open('/home/rapa/test/test2.py', 'r') as fp2:
        fp2_lst = fp2.readlines()
    
    # 'ok' in fp1_lst[4]
    # print('ok, all right!!'.find(',')
    # find() : 못 찾으면 0보다 작은 수
    
    print(fp1_lst)
    print('')
    print('-'*30)
    
    import re
    
    print(fp1_lst[4])
    # r = raw 문자열 그대로 인식한다.
    res = re.search(r'ok', fp1_lst[4])
    # res = re.search(r'\s+ok\s+', fp1_lst[4])
    # 역슬러시+를 붙여주면 좌우의 공백을 계산해준다.
    # \s는 공백 +는 한칸 이상의 공백
    print(res)
    print(res.group())
    
    res = re.search(r'(ok)', fp1_lst[4])
    print(res.groups())
    
    
    #########결과 값##########'
    
    ['asdfjklafhnl\n', 'akdslfj;ldhnjkg\n', 'od\n', 'ob\n', 'ok, all right!!\n', 'dlg;\n', 'dsflkj\n']
    
    ------------------------------
    ok, all right!!
    
    <re.Match object; span=(0, 2), match='ok'>
    ok
    ('ok',)

    패턴 찾기

     

    완성형

    #!/usr/bin/env python
    # encoding=utf-8  -> 문자열 집합 모든 언어를 표현 할 수 있다.
    # author        : 
    # created date  : 2024.01.07
    # modified date : 2024.03.03
    # description   : video 38분~ 1. 스탠다드 모듈 2. 써드파티 모듁 3. 본인이 작성한 모듈
    
    '''
    r: read
    w: wirte
    a: append
    '''
    import re
    # path 구상경로
    import sys
    import pathlib
    # 객체지향 파일 시스템 경로
    # from pathlib import Path 메인 클래스 임포트
    # 본인 홈디렉토리 경로 반환하는 함수
    # home = pathlib.Path.home()
    #     home.as_posix()
    # result = '{0}/{1}'.format(home.as_posix(), 'result.txt')
    # print(result)
    
    def get_path():
        home = pathlib.Path.home()
        result = '{0}/{1}'.format(home.as_posix(), 'result.txt')
        count = 0
        try:
            s_path = pathlib.Path(sys.argv[1])
            for i in s_path.glob("**/*.py"):
                if count > 5:
                    break
                with open(i.as_posix()) as fp:
                    # fp.readlines() --> list
                    try:
                        for rl in fp.readlines():
                            res = re.search(r'\s+(ok)\s+', rl)
                            if res is None:
                                continue
                            with open(home_path, 'a') as fp2:
                                fp2.write('{0}: {1}'.format(i.as_posix(), rl))
                    except UnicodeDecodeError as err:
                        pass
        except IndexError as err:
            sys.stderr.write('index가 잘못됨') #err도 출력을 한다.
    
    get_path()

     

    i가  파일경로가 됨 i 가 fp2.wirte(파일 이름, 내용)으로 바꾸면 된다.

Designed by Tistory.