2016-06-02 14 views
1

私は簡単で日常的な作業を自動化しようとしています:MySQLデータベースにインポートしたいSFTPサーバ上に複数の.csvファイルがあります。sftpからMySQLデータベースに毎日インポートする.csvファイル

ファイル名は、20160601-1.csv、20160601-2.csv、20160601-3.csvなどのような構造になっています。ファイルダイバーは、1日あたり8から20にダイバーします。 .csvのレイアウトは常に同じです(空のフィールドを含む10列)。

これはあまり詳しくはわかりませんが、私は今何時間も探していますが、どこから始めるべきかわかりません。

私はPHPがこれを行うには良い方法だと思いますか?あるいはPython?あなたはfgetcsv()関数を使用して、PHPでこれを行うことができます

+2

言語を読むこと

サンプル・コードは、ここでは関係ありません。あなたはおそらくそれを達成することができます。データベースにhteデータを入れる前にこれらのファイルを処理する必要がありますか、MySQLで単に 'LOAD DATA INFILE ...'を使うことができますか?もしそうなら、あなたはおそらく単純なbashスクリプトでそれを行うことができます。 –

+2

@dragoste:シェルから実行する場合は、mysqlimportユーティリティをLOAD DATAよりも好むでしょう。しかし、そうでなければ、私はあなたが今言ったすべてに同意します。 – eggyal

+0

@dragosteこれはタブで区切られたファイルなので、最初の5行を無視する必要があります。タブ区切りファイルの私の経験は、時々空のフィールドがLOAD DATAとLOAD DATA INFILEの問題を引き起こすことがあるということです(私は思うのですから?)ので、すべてのタブ(/ t)をカンマで置き換えてください。しかし、直接インポートするオプションがあればそれは素晴らしいでしょう! – 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

のように、複数の行を1つのクエリで挿入できます。これはまさに私が意味していたものです。 –

関連する問題