파일에 데이터 적기, 읽기 [파이썬3][python3] by 바죠

파이썬 언어로 파일에 데이터 적기,

파이썬 언어로 파일 속의 자료 읽어 들이기


이 두 가지 방법은 아주 중요한 것이다. 일반적으로 파이썬으로 어떠한 계산을 하던지, 대부분의 경우, 결국에는 위에서 나열한 두 가지 일들과 마주하게 된다.


파일에 데이터를 적는 방법, 예제:

일차원 데이터, 배열 X[]을적는 방법, 스트링으로 변환하여 적는다. x_decoded[] 데이터를 스트링으로 변환하여 적는다.


ifile=1

for i in range(nsamples1):

   fname=str(ifile).zfill(5)+'_fin' ; fname=fname.strip()

    afile=open(fname,"w")

    afile.write('# 9 1 200\n')

    for j inrange(original_dim):

       afile.write(str(X[i,j])+'\n')


    afile.close()

    ifile=ifile+1

for i in range(n*n):

   fname=str(ifile).zfill(5)+'_fin' ; fname=fname.strip()

   afile=open(fname,"w")

    afile.write('# 9 1 200\n')

    for j inrange(original_dim):

       afile.write(str(x_decoded[i,j])+'\n')

    afile.close()

    ifile=ifile+1


파일로부터 데이터를 읽는 방법, 예제:

파일속의 내용을 모두 스트링으로 읽어낸 다음, 숫자로 변환합니다.


for line in afile:

   if line[0:1]  == '#' :

       continue

   else:

    



for line in afile:

   if line.lstrip().startswith('#'):

        continue



---------------------------------------------------------------------------------------------------------------------


aa=[]

bb=[]

colors = []

afile=open("fort.11","r")

ii=0

for line in afile:

    if len(line.split()) ==4:

      continue

    if len(line.split()) ==2:

      ii=ii+1

      bb.append(float(line.split()[1]))

      aa.append(int(line.split()[0]))

      colors.append(float(line.split()[0])/230.)

afile.close()

aa=np.array(aa)

bb=np.array(bb)

colors=np.array(colors)


---------------------------------------------------------------------------------------------------------------------


특정한 이름을 가지는 파일에 자료를 적을 때, 아주 편리한 함수 소개:

파일 열기, 파일 닫기같은 부수적인 작업들이 프로그램 작성과정에서 표면적으로 들어나지 않게한다. 

원하는 것들을 편리하게 프로그램 위치에 상관없이 쉽게 적을 수 있게 만들어 둔 유용한 함수이다.

http://incredible.egloos.com/7485948


def append_multiple_lines(file_name, lines_to_append):
    with open(file_name, "a+") as file_object:
        appendEOL = False
        file_object.seek(0)
        data = file_object.read(100)
        if len(data) > 0:
            appendEOL = True
        for line in lines_to_append:
            if appendEOL == True:
                file_object.write("\n")
            else:
                appendEOL = True
            file_object.write(line)


---------------------------------------------------------------------------------------------------------------------


---------------------------------------------------------------------------------------------------------------------


def append_multiple_lines(file_name, lines_to_append):
    with open(file_name, "a+") as file_object:
        appendEOL = False
        file_object.seek(0)
        data = file_object.read(100)
        if len(data) > 0:
            appendEOL = True
        for line in lines_to_append:
            if appendEOL == True:
                file_object.write("\n")
            else:
                appendEOL = True
            file_object.write(line)

def toarxiv(x,fx):
    ndim=len(x)
    astring=' '
    for j in range(ndim):
        if x[j] > 0.5:
           astring=astring+str(1)+' '
        else:
           astring=astring+str(0)+' '
    lines_to_append=[astring+' '+str(fx)]
    append_multiple_lines("D:/YPHong/FSS/Script_Export_Spara/arxiv.txt",lines_to_append)
def fromarxiv(x):
    ndim=len(x)
    if os.path.isfile("D:/YPHong/FSS/Script_Export_Spara/arxiv.txt"):
       y=[ x[j] for j in range(ndim)]
    else:
        tmp=9e99
        return tmp
    ycode=[ 0  for j in range(ndim)]
    for j in range(ndim):
        if y[j] > 0.5:
           ycode[j]=1
        else:
           ycode[j]=0
    afile=open("D:/YPHong/FSS/Script_Export_Spara/arxiv.txt",'r')
    for line in afile:
        yarxiv=[ 0 for j in range(ndim)]
        for j in range(ndim):
            yarxiv[j]=int(line.split()[j])
        tmp=float(line.split()[-1])
        j0=0
        for j in range(ndim):
            if ycode[j] == yarxiv[j]:
               j0=j0+1
        if j0 == ndim:
           afile.close()
#          print('from arxiv.txt',tmp)
           return tmp
    afile.close()
    tmp=9e99
    return tmp

---------------------------------------------------------------------------------------------------------------------




덧글

  • wow 2020/12/12 15:56 # 삭제 답글

    파일 읽고 쓸때 인코딩 설정은 해주시는게 나아요
  • 바죠 2020/12/12 16:56 #

    코멘트 감사 드립니다. 덕분에 공부를 할 수 있는 계기를 마련했습니다.
    텍스트 파일 인코딩을 말씀하십니까?
    잘 모르는 내용인데, 'UTF-8' : 유니코드 인코딩 방식의 하나. Python 3에서 .py 소스 파일에 대한 디폴트 인코딩 방식.
    이미 존재하는 텍스트 파일의 인코딩은 notepad++ 등의 에디터에서 가능하고, 변환 역시 가능하다. 가능하면 UTF-8을 사용하는 것이 좋다. 대부분의 에디터에서 최초 저장하는 텍스트 파일은 UTF-8을 사용한다.
    https://wikidocs.net/15102


    f = open('SomeWord.txt','rt',encoding='utf-8') # Open file with 'UTF-8' 인코딩



댓글 입력 영역

최근 포토로그



MathJax