Python 문법

<문법>/파이썬|2021. 1. 13. 22:07
반응형

ctrl + f 로 찾기

 

subprocess : 파이썬에서  명령을 실행할  있게 해주는 라이브러리

단순 서브프로세스 실행을 바란다면 call 함수 사용한다

>>> import subprocess
>>> subprocess.call(["ls", "-al"])

ls-al ls-a이랑 ls-l 동시에 사용하기위한 명령어

ls -a  숨김파일도 보여주는 -a

ls -l http://www.incodom.kr/Linux/%EA%B8%B0%EB%B3%B8%EB%AA%85%EB%A0%B9%EC%96%B4/ls 참조

drwx------  2 sbx_user1051  991 4.0K Oct  2 12:10 .
dr-xr-xr-x 21 root         root 4.0K Aug 31 10:28 ..
-rw-rw-r--  1 sbx_user1051  991 1.0M Oct  2 12:11 file

 

 

결과값을 문자열 데이터로 사용하고 싶을떄에는 check_output함수를 사용 , 결과값을 문자열데이터로 리턴해줌

>>> out = subprocess.check_output (['ls', '-al'] )
>>> out 
b'total 8\ndrwxr-xr-x. 2 root root 4096 10\xec\x9b\x94  8 17:58 .\ndrwxr-xr-x. 6 root root 4096 10\xec\x9b\x94  8 17:58 ..\n'

 

 

 

Popen

popen 생성자 : 프로세스를 시작

communicate 메서드: 자식 프로레스들이 일을 마치고 종료하기를 기다림.

 

 

Pipe ??

-r 명령어를 실행하면 명령어가 표준출력으로 출력한 문자열을 읽기위한 용도로 pipe open

w  명령어를 실행하고 키보드로 데이터를 입력해야하는 명령어에 사용함.  커맨드의 표준입력으로 데이터를 전송하기위한 pipe open

 

 

 

import asyncio

-> 비동기 프로그래밍을 위하 모듈이며 CPU작업과 I/O  병렬로 처리하게 해줌

****동기(Synchronout)처리는 특정 작업이 끝나면 다음 작업을 처리하는 순차처리 방식이고, 비동기처리는 여러작업을 처리하도록 예약한뒤 작업이 끝나면 결과를 받는 방식

import asyncio 
async def hello():    # async def로 네이티브 코루틴을 만듦    
	print('Hello, world!') loop = asyncio.get_event_loop()     # 이벤트 루프를 얻음
loop.run_until_complete(hello())    # hello가 끝날 때까지 기다림
loop.close()      #이벤트 루트를 닫음
#추가추가

loop = asyncio.get_event_loop()     # 이벤트 루프를 얻음
loop.run_until_complete(hello())    # hello가 끝날 때까지 기다림

os.urandom이라는 함수가 있다

- 이 함수는 원하는길이(byte) unsigned수치값을 만들어준다.

- 이것 암호화 알고리즘 키를 생성할떄 유용하다.

 

 

<파일 입출력>

https://wikidocs.net/16077

https://wikidocs.net/14130 

f = open('hello.txt', 'w')
f.write('안녕하세요\n')
f.close()

위처럼 일일히 close하기 귀찮으면 아래처럼 써서 자동으로 닫게하면 됨 

with open('hello.txt', 'w') as f:
    f.write('안녕하세요\n')

 

 

open(file, 'wb', buffering=byte_size)

wb 의미는? file대신 open 사용한다. 파이썬 2에서만 사용된다.

- wb 데이터를 저장하라는것 /rb 데이터를 읽으라는뜻

- buffering = 버퍼링끄기는 0(바이너리모드에서 버퍼링 미수행), 라인모드는1(텍스트모드에서 개행문자(\n)만날때까지 버퍼링), 고정크기로 보내려면 임의의 바이트수를 1보다 큰양의 수로 입력

-errors=None 텍스트모드시 에러처리

 

 

1) read() 파일전체의 내용을 하나의 문자열로 읽어온다.

2) readline() 한라인씩 읽음 (대용량파일을 읽어올경우 굉장히유용)

3) 바이너리 파일을 1바이트씩 읽어오는 방법은?

with open("myfile", "rb") as f:
    byte = f.read(1)
    while byte != "":
        # byte처리
        byte = f.read(1)

 

 

 

f.flush() -> 실제 파일이 기록되지만 파일을 닫지는않는다.

 

f.seek(0,2) ->파일끝에서 0바이트이동(파일 끝까지이동하라는뜻)\

f.seek(i) ->파일 시작에서 i바이트로 이동

ex)f.seek(0) =첫줄로 이동하라

f.seek(-(i+1),2) -> 파일끝에서 (i+1) 바이트 이전으로

 

randrange ->  import random이랑 같이씀 파이썬 랜덤함수중하나임

randrange(a,b) randrange(a) 두가지버전이있다.

randrange(b) 0<=x<b  범위내에서 랜덤한 정수 int 반환한다.

 

fsync -> 동기식 입출력함수

fd 지정된 파일과 관련된 모든 변경자료(데이터+메타데이터) 디스크와 동기화한다.

디스크 I/O 연산은 커널안의 버퍼캐시나 페이지 캐시를 거친다. 따라서 프로세스가 파일에 데이터를 기록하면 커널은  데이터를 커널의 버퍼들  ㅇ하나에 복사해서 내부적인 대기열에 등록해두고, 적당한 시점이 되면 디스크에 기록한다. 이렇게 대이터가 버퍼에만 있고 디스크에는 아직 기록되지않은 상태가   있다 이때 문제점은

1. 디스크에 순서대로 기록해야만하는경우 -> 커널 대기열에서는 성능개션에 적합하게 요청순서를 변경해서 문제가 발생

2. 시스템이 비정상적으로 종료될경우

이때 syn, fsync, fdatasync 함수를 이용한다.

 

for _ in range ():

a = [0 for _ in range(10)]
a = [0]*10
#두개가 같음

gzip

파이썬에서 압축된 파일내용을 바로 읽을 수있게 해주는 모듈

#압축하기
import gzip
path = './data/fruit.txt'
with open(path,'rb') as f_in:

    with gzip.open(path+'.gz','wb') as f_out:
        f_out.writelines(f_in)  # ./data/fruit.txt.gz 압축 파일 생성

https://wikidocs.net/8934

 

unittest

madplay.github.io/post/python-main-function

wikidocs.net/16107 참조

 

<리눅스 명령어>

rm-rf  삭제 리눅스 명령어

**sudo rm-rf / 포맷수준 삭제

 

<일치하는 string 찾기>

find , rfind 일치하는것찾기

- 일치하는것 앞에서 찾기 x.find

- 일치하는것 뒤에서 찾기 x.rfind

e.g result = json.loads(x[x.find('{'): x.find('}')+1])

반응형

댓글()