파일입출력 기본 - 파이썬

Posted by HULIA(휴리아)
2019. 4. 28. 19:59 백엔드개발/파이썬

파이썬 파일 입출력

open()과 close()는 파이썬 내장함수라서 모듈 import없이 사용가능

open(filename, mode);
close();

파일 처리 모드

r : 읽기모드(모드를 쓰지 않으면 기본모드)
w : 쓰기모드
a : 파일에 맨뒤에 추가모드
rb : 이진 파일 읽기모드
wb : 이진 파일 쓰기모드
ab : 이진 파일 맨뒤에 추가모드
w+ : 읽기쓰기모드

현재 디렉토리 위치 출력(os모듈)

import os
print os.getcwd();

파일 쓰기 예시

s = """hello
hi
korea."""
f = open('t.txt', 'w')
f.write(s)
f.close()

파일 읽기 예씨

f = open('t.txt', 'r') #open('t.txt') 같은 의미다
s = f.read()
print s
f.close()

라인 단위로 파일 읽기

총 4가지 방식이 있음
1)for문을 이용하는 방법

f = open('t.txt')
i = 1
for line in f:
    print i, ":", line,
    i +=1
f.close()

2)readline() : 한번에 한줄씩 읽는다

f = open('t.txt')
line = f.readline()
i = 1
while line:
    print i, ":", line,
    line = f.readline()
    i +=1
f.close()

3)readlines() : 파일 전체를 라인 단위로 끊어서(개행문자까지 한번씩 읽어드림) 리스트에 저장한다

f = open('t.txt')
print f.readlines()

f.seek(0) #파일 맨 앞으로 이동
i = 1
for line in f.readlines():
    print i, ":", line,
    i +=1
f.close()

4)xreadlines() : readlines()와 유사하지만 파일 전체를 한꺼번에 읽지 않고, 상황별로 필요한 라인만 읽는다. 대용량의 파일을 for문 등으로 라인 단위로 읽을 때 효율적이다

f = open('t.txt')
print f.xreadlines()

f.seek(0) #파일 맨 앞으로 이동
i = 1
for line in f.xreadlines():
    print i, ":", line,
    i +=1
f.close()

1), 4)방법을 추천함

라인 단위로 파일 쓰기

lines = ['first line\n','second line\n','third line\n']
f = open('t1.txt','w')
f.writelines(lines)
f.close

# 파일 내용 확인
f = open('t1.txt')
print f.read()
f.close()
lines = ['first line','second line','third line']
f = open('t1.txt','w')
f.write('\n'.join(lines))
f.close

# 파일 내용 확인
f = open('t1.txt')
print f.read()
f.close()

파일내에 존재하는 단어의 수

f = open('t.txt')
s = f.read()
n = len(s.split()) # split() -> 공백문자를 기준으로 문자를 잘라 list 화
print n
f.close()

기존 파일에 내용 추가 예시

f = open('t.txt', 'a')
f.write('forth line\n')
f.close()

# 파일내용 확인
f = open('t.txt')
print f.read()
f.close()

파일 내 임의 위치로 접근

seek(n) : 파일의 첫번째 위치에서 n번째 바이트로 포인터 이동
tell() : 파일 내 현재 포인터 위치를 반환

f = open('t.txt', 'w+')
s='02121222022'
f.write(s)


# 파일내용 확인
f.seek(5)       # 시작부터 5바이트 이동
print f.tell()  # 현재위치 알려줌
print f.read(1) # 1문자 읽기

f.close()

Mysql 컬럼의 줄바꿈, 공백, 캐리지리턴 tab 제거하고 select하기

Posted by HULIA(휴리아)
2019. 3. 10. 23:29 백엔드개발/데이터베이스

1. 라인피드 제거하고 select하기

select replace(컬럼명, char(10), '') from 테이블명;


2. 캐리지리턴 제거하고 select하기

select replace(컬럼명, char(13), '') from 테이블명;


3. tab 제거하고 select하기

select replace(컬럼명, char(9), '') from 테이블명;


4. 개행문자 제거하고 select하기

select replace(컬럼명, '\r\n', '') from 테이블명;


5. 하이픈(-) 제거하고 select하기

select replace(컬럼명, '-', '') from 테이블명;


6. 공백 제거하고 select하기

select replace(컬럼명, ' ', '') from 테이블명;

MYSQL DDL 쿼리 CREATE ALTER

Posted by HULIA(휴리아)
2018. 12. 16. 21:06 백엔드개발/데이터베이스

CREATE TABLE `BANK_SMS_PARSING` (

  `ID` int(11) NOT NULL AUTO_INCREMENT,

  `BANK_NAME` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,

  `SMS_ADDRESS` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,

  `DELIMITER` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,

  `LEN_ACCOUNTNUM` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,

  `POS_DATE` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,

  `POS_ACCOUNTNUM` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,

  `POS_PRICE` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,

  PRIMARY KEY (`ID`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;




ALTER TABLE `easywhooing`.`CARD_SMS_PARSING` 

CHANGE COLUMN `ID` `ID` INT(11) NOT NULL AUTO_INCREMENT ;

파이썬을 이용한 자동화 스크립트 강의 정리1

Posted by HULIA(휴리아)
2018. 11. 18. 01:40 백엔드개발/파이썬

파이썬 특징

-가독성(읽기 쉽다) - 문법이 간결하고 들여쓰기를 기반으로 가독성이 좋음

-풍부한 라이브러리를 바탕으로 무궁한 확장성

-접착성 - C로 구현된 모듈을 쉽게 만들어 붙일 수 있음 반대 기능도 가능함

-유니코드 - 문자열이 모두 유니코드로 나타남

-동적 타이핑(변수타입이 동적) - Dynamic Language, interpreted Language

-개발생산성이 빠르다

-다목적이다


파이썬 활용

-배우기 쉬운 교육용 프로그래밍 언어

-쉘 스크립트와 배치프로그램 대안

-데이터 과학자가 되려면 필수

-웹서버 어플리케이션 - Django, Flask

-개인과 팀 단위의 업무 자동화


파이썬 실습예제

-파일 및 디렉토리 정리 작업

-엑셀파일 및 CSV 파일 작업 자동화

-웹에서 데이터 가져와서(스크래핑) 정리작업 자동화

-웹 서비스를 활용하여 데이터 수집 및 정리작업 자동화

-비정형 데이터(주로 텍스트 데이터)에서 특정 데이터 검색

-반복되는 메일 보내기 작업 자동화

-메일을 통한 업무 작업화


Pycharm설치

왼쪽하단의 네모버튼을 클릭해서 사이드 메뉴 나오도록 함

Editor Font : consolas

Console Font : consolas


변수들의 메모리 공간을 보여준다

다른언어도 알 수 있음

pythontutor.com


파이썬 코딩 스타일 가이드

www.pep8.org



문자열 자르기 할때 음수 인덱스 사용가능

문자열 반복할때 문자열*4(4번 반복)


리스트의 특징

마지막 요소부터 접근가능

ex) list = ['red','blue','white']


튜플의 특징

읽기만 가능하므로 속도가 빠름

튜플은 더 적은 공간을 사용한다

실수로 튜플의 항목이 손상될 염려가 없다

함수의 파라미터들은 튜플로 전달된다.

ex) tuple = 'red', 'blue', 'white'


사전의 특징

key과 값이 한쌍인 형태로 이용하는 형태

ex) dictionary = { 'cccc':'dddd', 'ffff':'gggg' }


시퀀스 데이터 타입

-str, list, tuple

-unpacking이 가능하다

a,b,c,d = 시퀀스 데이터 타입


예제 코드 모음 사이트

http://code.activestate.com/recipes/langs/python/



정규식테스트검증 웹 사이트

https://regex101.com

http://regexr.com



앱)sqlSessionDao관련

Posted by HULIA(휴리아)
2018. 11. 14. 22:04 백엔드개발/자바스프링
case1)
@Repository
public class CustomDaoImpl extends SqlSessionDaoSupport implements CustomDao

@Autowired
public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate){
super.setSqlSessionTemplate(sqlSessionTemplate);
}

getSqlSession().selectList..
getSqlSession().selectOne
(int)getSqlSession().selectOne



case2)
@Repository("name")
public class CustomDaoImpl implements CustomDao

@Autowired
private SqlSessionTemplate sqlSessionTemplate;

sqlSessionTemplate.update
sqlSessionTemplate.selectList
sqlSessionTemplate.selectOne

'백엔드개발 > 자바스프링' 카테고리의 다른 글

스프링 템플릿 엔진 종류 및 성능 및 비교  (0) 2019.08.04
REST API 란  (0) 2019.08.04
앱)paging 관련  (0) 2018.11.14
앱)jstl java jsp excel export  (0) 2018.11.14
앱)java spring에서 web page간의 연동처리  (0) 2018.11.14

앱)paging 관련

Posted by HULIA(휴리아)
2018. 11. 14. 21:55 백엔드개발/자바스프링
commonUtil.java
public static void setPagingParmas(ModelAndView view, int totalCount, int pageNo){
 if(totalCount != 0)
{
  int countPerPage = CommConfig.getCountPerPage();
int totalPageCount = totalCount / countPerPage;
if(totalCount%countPerPage != 0){
   totalPageCount ++;
}
int startPageNo = (pageNo / 10) *10 +1;
if(pageNo %10 ==0){
startPageNo = startPageNo - 10;
}

int endPageNo = startPageNo + 9;
if(endPageNo > totalPageCount){
 endPageNo = totalPageCount;
}

view.addObject("pageNo",String.ValueOf(pageNo));
view.addObject("totalCount",String.ValueOf(totalCount));
view.addObject("countPerPage",String.ValueOf(countPerPage));
view.addObject("totalPageCount",String.ValueOf(totalPageCount));
view.addObject("startPageNo",String.ValueOf(startPageNo));
view.addObject("endPageNo",String.ValueOf(endPageNo));

}else{
   view.addObject("totalCount",String.ValueOf(totalCount));
}

}



*Table.jsp
<@include file="/WEB-INF/jsp/common/paging.jsp" %>

<script type="text/javascript">
$(document).ready(function(){
$('#totalCount').text('${totalCount'}');
}
</script>



paging.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page import=util.CommConfig" %>

<script type="text/javascript">
function movePage(type, pageNo){
var moveType=parseInt(type);
var totalPageCount = parseInt("${totalPageCount}");
var intPageNo = parseInt(pageNo);
var nextPageNo = 0;

switch(moveType){
case 0://10페이지 전으로
if(intPageNo < 12){
      nextPageNo = 1;
    } else{
     nextPageNo = intPageNo - 10;
   }
break;

case 1://1페이지 저으로
        if(intPageNo == 1){
         nextPageNo = 1;
       } else{
           nextPageNo = intPageNo - 1;
       }
    break;
case 2:
nextPageNo = intPageNo;
break;
case 3://한페이지 다음으로
if(intPageNo == totalPageCount){
      nextPageNo = intPageNo;
      }else {
         nextPageNo = intPageNo +1;
      }
    break;
case 4://10페이지 다음으로
if(intPageNo == totalPageCount){
 nextPageNo = intPageNo;
} else if ((${pageNo} + 10) > totalPageCount){
       nextPageNo = totalPageCount;
    }else{
        nextPageNo = intPageNo + 10;
     }
break;

}
goPage(nextPageNo);

}
</script>


<c:if test="${totalCount != '0'}">
<p class="paging">
  <a class="next" href="#" onclick="movePage('0', '${pageNo}');">이전</a>
  <a class="next" href="#" onclick="movePage('1', '${pageNo}');">이전</a>

<c:forEach var="page" begin="${startPageNo}" end="${endPageNo}">
<c:choose>
 <c:when test="${pageNo == page}">
 <strong>${page}</strong>
 </c:when>
<c:otherwise>
<a href="#" onclick="movePage('2','${page}');">${page}</a>
</c:otherwise>
</c:choose>
</c:forEach>

  <a class="next" href="#" onclick="movePage('3', '${pageNo}');">다음</a>
  <a class="next" href="#" onclick="movePage('4', '${pageNo}');">다음</a>
</c:if>

앱)jstl java jsp excel export

Posted by HULIA(휴리아)
2018. 11. 14. 21:24 백엔드개발/자바스프링
exportexcel.jsp
<% page language="java" contentType="application/vnd.ms-excel; charset=utf-8" pageEncoding="utf-8"%>
<% taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<% taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%
response.setHeader("Content-Type". "application/vnd.ms-xls");
response.setHeader("Content-Disposition", "inline; filename=xxxx.xls");
%>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html"; charset="utf-8" />
<style>td{mso-number-format:\@; } </style>
<body>
<table>
<thead>
<tr>
 <th scope="col"><span></span></th>
 <th scope="col"><span></span></th>
 <th scope="col"><span></span></th>
 <th scope="col"><span></span></th>
 <th scope="col"><span></span></th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</body>
</html>



function exportExcel(){
    $("#searchForm").attr("action", "<c:url value='/xx.do' />").submit();
}

앱)java spring에서 web page간의 연동처리

Posted by HULIA(휴리아)
2018. 11. 14. 20:13 백엔드개발/자바스프링
웹페이지 -> java spring
@RequestMapping(value="/example/request", method=RequestMethod.POST)
파라미터기본(HttpServletRequest 와 HttpServletResponse)

특별파라미터추가
form의 name으로 구성된 VO를 만들면 편하게 진행가능하다
@ModelAttribute 이용해서 해당VO를 파라미터에 추가하면 해당 객체에 값이 자동으로 들어가게 된다
 



java spring -> 웹페이지
1)값만 넘길때
리턴값설정 @ResponseBody String
원하는 결과값을 String객체에 담아서 리턴하면 됨

2)페이지 이동을 할때
리턴값설정 ModelAndView
ModelAndView 객체생성하여서
setViewName("example/intro");

3)페이지 이동을 하면서 여러가지 값을 같이 넘길때
리턴값설정 ModelAndView
ModelAndView 객체생성하여서
setViewName("example/intro");
addObject("넘길값의key",넘길값);
addObject("넘길값의key",넘길값);
addObject("넘길값의key",넘길값);
addObject("넘길값의key",넘길값);
addObject("넘길값의key",넘길값);

앱)java spring application config properties 방식

Posted by HULIA(휴리아)
2018. 11. 14. 19:47 백엔드개발/자바스프링
*.java
@Value("#{api['server.brCode']}")
private String api


*.properties
server.brCode=KKKK


applicationContext.xml
xmlns:utill="http:www.springframework.org/schema/util"
http:www.springframework.org/schema/util/spring-util.xsd"


<util:properites id="api" location="file:${home.dir}/api${server.type}.properties />

앱)java spring application Config xml방식

Posted by HULIA(휴리아)
2018. 11. 14. 19:45 백엔드개발/자바스프링
applicationContext.xml
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
     <property name="locations">
               <list>
                      <value>file:${home.dir}/applicationConfig${server.type}.xml</value>
               </list>
     </property>
</bean>

<bean id="CommConfig" class="util.CommConfig">
     <property name="keytest" value=${keytest}" />
     <property name="keytest" value=${keytest}" />
     <property name="keytest" value=${keytest}" />
     <property name="keytest" value=${keytest}" />
     <property name="keytest" value=${keytest}" />
     <property name="keytest" value=${keytest}" />
</bean>

applicationConfig{DEV/STG/PRD}.xml
<?xml version="1.0" encoding="UTF-8"?>
<properties>
           <comment> sample</comment>
       <entry key="keytest">keyvalue</entry>
       <entry key="keytest">keyvalue</entry>
       <entry key="keytest">keyvalue</entry>
       <entry key="keytest">keyvalue</entry>
       <entry key="keytest">keyvalue</entry>
</properties>


CommConfig.java
public class CommConfig{

    private static String keytest;
    private static String keytest;
    private static String keytest;
    private static String keytest;
    private static String keytest;
    private static String keytest;
    private static String keytest;
    private static String keytest;
}