<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>hayden.log</title>
        <link>https://velog.io/</link>
        <description>Hayden</description>
        <lastBuildDate>Sat, 31 Jul 2021 06:26:30 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>hayden.log</title>
            <url>https://images.velog.io/images/hey-wan/profile/be21ffb6-0251-4c44-b138-742d20198206/photo_2021-07-31_15-56-20.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. hayden.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/hey-wan" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[(파이썬) 텍스트 파일 읽기 쓰기]]></title>
            <link>https://velog.io/@hey-wan/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%ED%85%8D%EC%8A%A4%ED%8A%B8-%ED%8C%8C%EC%9D%BC-%EC%9D%BD%EA%B8%B0-%EC%93%B0%EA%B8%B0</link>
            <guid>https://velog.io/@hey-wan/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%ED%85%8D%EC%8A%A4%ED%8A%B8-%ED%8C%8C%EC%9D%BC-%EC%9D%BD%EA%B8%B0-%EC%93%B0%EA%B8%B0</guid>
            <pubDate>Sat, 31 Jul 2021 06:26:30 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h3 id="📍-intro">📍 intro</h3>
<p><img src="https://images.velog.io/images/hey-wan/post/b1be8411-e7c5-4d6f-9fbd-7f111adc1a49/%EC%BA%A1%EC%B2%98.PNG" alt="">
영타 연습을 위해 따로 설치가 필요없는 온라인용 <strong>말랑말랑 한컴타자</strong>⌨ 를 사용했다.
<img src="https://images.velog.io/images/hey-wan/post/4ffaa8a2-ad58-47e6-94da-68d47933b2ae/%EC%BA%A1%EC%B2%981.PNG" alt="">
<code>불러온 글</code> 탭에 원하는 txt 파일을 업로드해서 타자 연습을 할 수 있게 되어있다.
파일 규격을 UTF-8로 변환 후 불러와야해서 파이썬 파일 입출력을 활용했다. 
겸사겸사 <strong>파이썬에서 파일을 열고 저장하는 방법</strong>을 복습해보자 ❕ </p>
</blockquote>
<hr>
<h3 id="📁-파일-읽기와-쓰기">📁 파일 읽기와 쓰기</h3>
<p><strong>파일 읽기(read)</strong>는 파일을 여는 것, <strong>파일 쓰기(write)</strong>는 파일 저장을 의미한다.</p>
<p>좀 더 큰 개념으로 살펴보면,</p>
<ul>
<li>파일 열기 : 하드 드라이브(HD, 저장공간)에 있는 데이터를 램(RAM, 메인 메모리)에 입력하는 것 : <strong>📥Input</strong></li>
<li>파일 쓰기 : 램에서 사용하고 있는 데이터를 드라이브에 내보내어 저장하는 것 : <strong>📤Output</strong></li>
</ul>
<p><img src="https://images.velog.io/images/hey-wan/post/ce0051d1-f755-4880-bbf5-37b178949d37/Untitled.png" alt=""></p>
<hr>
<h3 id="📲-인코딩과-디코딩">📲 인코딩과 디코딩</h3>
<p>컴퓨터는 문자를 못 읽는다. 숫자 코드로 변환해서 알려줘야 한다. 
이러한 문자와 숫자 간 변환 방식을 문자코드라고 한다.</p>
<p>문자를 코드로 변환하는 것이 <strong>인코딩(encoding)</strong>, 코드를 문자로 변환하는 것이 <strong>디코딩(decoding)</strong>이다. 만약 utf-8로 인코딩한 파일이 있다면, 이는 utf-8 방식으로만 디코딩할 수 있다. </p>
<blockquote>
<p><strong>파일 I/O와는 다른 개념인 점을 유의하자</strong>
처음에 파일 저장과 디코딩이 헷갈렸는데(..💻🖥) 코드를 문자로 바꾸는 디코딩은, 파일 인식 과정에서 컴퓨터가 하는 일이지 내가 하는게 아니었다. 난 그저 인코딩만 잘 해서 컴퓨터에게 넘겨주면 될 뿐</p>
</blockquote>
<p>모든 텍스트 파일은 특정한 규격의 문자코드, 인코딩 방법을 갖는다.</p>
<table>
<thead>
<tr>
<th>인코딩 방식</th>
<th>문자 코드</th>
<th>언어</th>
</tr>
</thead>
<tbody><tr>
<td>UTF8⭐</td>
<td>유니코드</td>
<td>all</td>
</tr>
<tr>
<td>CP949</td>
<td>ASCII, ANSI</td>
<td>한글 등</td>
</tr>
<tr>
<td>EUC-KR</td>
<td>EUC-KR</td>
<td>한글, 영어, 한문 등</td>
</tr>
</tbody></table>
<hr>
<h3 id="📌-open-함수">📌 open() 함수</h3>
<ol>
<li><p>open() 함수를 사용해서 파일을 열거나 저장할 수 있다. open() 함수에는 <strong>모드 설정값</strong>을 사용한다.</p>
<table>
<thead>
<tr>
<th>모드</th>
<th>의미</th>
</tr>
</thead>
<tbody><tr>
<td>&#39;w&#39;</td>
<td>쓰기(write, 저장)</td>
</tr>
<tr>
<td>&#39;r&#39;</td>
<td>읽기(read, 열기)</td>
</tr>
<tr>
<td>&#39;a&#39;</td>
<td>추가(append, 파일 마지막에 새로운 내용 추가)</td>
</tr>
</tbody></table>
</li>
<li><p>open() 함수는 <strong>with 구문</strong>과 함께 사용하면 훨씬 오류를 줄일 수 있다. with 블럭을 빠져나가면 알아서 close가 실행되기 때문이다.  <strong><strong>__</strong>enter______()</strong>, <strong><strong>__</strong>exit______()</strong>를 자동 호출해주기 때문에 예외발생 또는 resource release 누락 시에도 정상 처리해준다. 즉, try / except / finally를 명시적으로 사용한 것과 같은 효과를 얻게 된다. </p>
<blockquote>
<p>참고) <a href="https://valuefactory.tistory.com/514"> <strong>enter</strong>, <strong>exit</strong>, with 구문</a> </p>
</blockquote>
</li>
<li><p>파일 읽기는 <strong>.read()</strong> 말고도 <strong>readline(), readlines(), for문</strong>을 이용한 방법이 있다. </p>
<ul>
<li>.readline()는 txt파일에 있는 첫번째 줄만 가져오고 </li>
<li>.readlines()는 txt파일에 있는 모든 텍스트를 한 줄 단위로 끊어서 리스트에 저장해주고 </li>
<li>for문 사용하면, 텍스트 파일의 처음부터 끝까지 자동으로 한 줄씩 내려간다<pre><code class="language-python">with open(&quot;data/test.txt&quot;, &#39;r&#39;, encoding=&#39;UTF8&#39;) as f:
  for line in f:
      print(line)</code></pre>
</li>
</ul>
</li>
</ol>
<hr>
<h3 id="📂-open-함수로-파일-인코딩-방식-바꾸기">📂 open() 함수로 파일 인코딩 방식 바꾸기</h3>
<p>타자 연습에 많이 쓰는 소설 &lt;무진기행&gt;, &lt;어린왕자&gt;의 텍스트 파일을 구했다. 인터넷에 돌아다니는 걸 다운받아서 써도 되고, 좋아하는 뮤지션의 가사를 긁어다가 메모장으로 txt파일을 만드는 방법도 있겠다.</p>
<p>그럼 파일 I/O를 활용해서 인코딩 방식을 바꿔보자.</p>
<h4 id="">　</h4>
<ol>
<li>구한 텍스트 파일을 &quot;어린왕자.txt&quot; 파일로 저장해주었다.</li>
</ol>
<ol start="2">
<li><p>&quot;어린왕자.txt&quot;의 인코딩 방식을 확인한다. (utf8이 필요한 상황)
<img src="https://images.velog.io/images/hey-wan/post/c1aca00e-201b-4d2b-9219-932a8a69413a/%EC%96%B4%EB%A6%B0%EC%99%95%EC%9E%90.PNG" alt=""></p>
<blockquote>
<p>참고) <a href="https://somjang.tistory.com/entry/Python-%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%98-%EC%9D%B8%EC%BD%94%EB%94%A9%EC%9D%84-%ED%99%95%EC%9D%B8%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95">파이썬 라이브러리로 확인하는 방법이 정리된 블로그 </a></p>
</blockquote>
</li>
<li><p>Jupyter Notebook에서 파이썬 코드 새로 열기</p>
<blockquote>
<p>텍스트 파일은 코드(ipynb)와 같은 경로에 있어야 편하다.</p>
</blockquote>
</li>
<li><p><strong>기존 데이터를 담은 변수</strong> 만들기</p>
<ul>
<li><code>r</code> 모드로 &quot;어린왕자.txt&quot; 파일을 읽어온다.</li>
<li>as 뒤에 이 파일을 인지할 이름 little을 선언한 뒤, little이라는 이름의 데이터를 read하여 data 변수에 담기</li>
</ul>
</li>
</ol>
<pre><code class="language-python">with open(&quot;어린왕자.txt&quot;, &quot;r&quot;) as little:
    data = little.read()</code></pre>
<ol start="5">
<li><p><strong>새로운 파일에 데이터 쓰기</strong></p>
<ul>
<li><code>w</code> 모드인채로 open() 실행을 먼저 한다.</li>
<li>&quot;The little prince.txt&quot;라는 파일은 아직 내용이 없는 텍스트 파일이다.빈 txt파일에 연계된 객체 이름을 fileneme로 두고, 이 객체에 .write() 함수를 써서 data 변수에 담긴 데이터를 써주는(=저장해주는) 것이다. </li>
<li>이때 encoding을 지정하면 파일 규격이 바뀐다. <pre><code class="language-python">with open(&quot;The little prince.txt&quot;, &#39;w&#39;, encoding=&quot;utf8&quot;) as filename:
filename.write(data)</code></pre>
</li>
</ul>
</li>
<li><p>파일 &quot;The little prince.txt&quot;(utf8)를 한컴타자에 불러오기 후 사용</p>
<h1 id="-1">　</h1>
<h4 id="📇-결론-영타-연습해서-빠른-타수로-코딩-시간-단축하자-͡°-͜ʖ-͡°ㅎㅎ">📇 결론) 영타 연습해서 빠른 타수로 코딩 시간 단축하자( ͡° ͜ʖ ͡°)ㅎㅎ</h4>
</li>
</ol>
]]></description>
        </item>
    </channel>
</rss>