2016-06-02 5 views
1

간단하고 일상적인 작업을 자동화하려고합니다 : MySQL 데이터베이스에서 가져 오려는 SFTP 서버에 여러 .csv 파일이 있습니다.매일 sftp에서 MySQL 데이터베이스로 .csv 파일 가져 오기

파일 이름은 20160601-1.csv, 20160601-2.csv, 20160601-3.csv 등과 같은 구조로되어 있습니다. 파일 수는 하루에 8에서 20까지 다양합니다. .csv의 레이아웃은 항상 동일합니다 (빈 칸이있는 열 10 개).

나는 이것이 매우 자세하지는 않지만 지금은 몇 시간을 찾고 있으며 어디서부터 시작해야할지 모른다.

나는 PHP가 이것을하는 좋은 방법이라고 생각하니? 아니면 파이썬인가?

+2

을 읽을 수 fgetcsv() 함수

샘플 코드를 사용하여 PHP에서이 작업을 수행 할 수 있습니다. 당신은 아마 그것들 중 어떤 것을 달성 할 수 있습니다. 데이터를 DB에 저장하기 전에이 파일을 처리해야합니까? 아니면 단순히 MySQL에서 LOAD DATA INFILE ...을 사용할 수 있습니까? 그렇다면 간단한 bash 스크립트로 그렇게 할 수있을 것이다. –

+2

@dragoste : 쉘에서 수행하는 경우 mysqlimport 유틸리티를 'LOAD DATA'보다 선호합니다. 그러나 그렇지 않으면 나는 방금 말한 모든 것에 동의합니다. – eggyal

+0

@dragoste 탭으로 구분 된 파일이므로 처음 5 줄을 무시해야합니다. 탭 분리 된 파일에 내 경험을 때로는 빈 필드를 LOAD DATA 및 LOAD DATA INFILE 인해 문제가 발생합니다 (내가 생각하기 때문에?) 그래서 모든 탭 (/ t) 쉼표로 ens csv 가져 오기 mysql을 바꿉니다. 하지만 직접 가져올 수있는 옵션이 있다면 그것은 좋을 것입니다! – Glarp

답변

1

당신은 문제가되지 않습니다 여기에 CSV 파일을 언어를

 



    //read file 
     $fp = fopen($filename,'r') or die("can't open file"); 
     $csv_line=fgetcsv($fp); 
     $last=0; 

     $insert_count=0; 
     while($csv_line = fgetcsv($fp,1024)) 
     { 
      //$csv_line is an indexed array for values on each line 
      //database update code goes here 
     } 

+0

각 행에 대해 별도의 쿼리를 실행한다는 점에 유의해야합니다. 대용량 파일의 경우 처리하는 데 오랜 시간이 걸립니다. 일괄 삽입을 수행하는 것이 더 좋을 수 있습니다 (예 : 100 또는 1000 행마다. –

+1

'INSERT INTO tbl_name (a, b, c) VALUES (1,2,3), (4,5,6), (7,8,9);' – Pankaj

+0

예와 같이 단일 쿼리로 여러 행을 삽입 할 수 있습니다. , 이것은 정확하게 내가 의미했던 것입니다. –

관련 문제