我有大约1000个csv文件来保存客户端信息,它们的格式都是相同的。我试图将所有这些文件移动到一个MySQL数据库表中,无论是在一个表上,还是每个csv一个表,无论哪个更合理。
无论如何,我只能找到有关使用几个csv文件进行操作的信息,手动进入它们并正确格式化,然后导入MySQL。超过1000个文件我无法做到这一点。
文件来自谷歌电子表格,这是公司客户的原始主机(每个都有自己的数据电子表格)。
转到我为公司建立的应用程序。
答案 0 :(得分:1)
这是我的CSV导入程序的常规版本。 创建一个表格并替换' your_table_name_here'与你的桌子。创建所有列并在包含所有CSV文件的文件夹中运行此脚本。它将尽力将所有列与数据匹配。
//Create database connection
$host = '127.0.0.1';
$db = 'your_database';
$user = 'username';
$pass = 'password';
$charset = 'utf8';
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$opt = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
$pdo = new PDO($dsn, $user, $pass, $opt);
//Run this script in the folder that has all the CSV files that you want to import
//Grab list of all CSV files
$files=glob('*.csv');
foreach($files as $file)
{
$handle = fopen($file, "r");
$cnt = 0;
$is_first = true;
echo "OPENING $file\n";
if($handle)
//Change this value. Usually delimiter is ',' but if your CSV file has something else, you will need to modify this value
$delimiter='|';
while (($csv = fgetcsv($handle, 5000, $delimiter)) !== false) {
$d = array();
if ($is_first) {
$is_first = false;
$header=$csv;
$inserter=$pdo->prepare("replace into your_table_name_here(`".implode('`,`',$header)."`)
values (:".implode(',:',$header).");");
}
else {
$to_insert=array();
foreach($csv as $key=>$val)
{
$to_insert[':'.$header[$key]]=$val;
}
$inserter->execute($to_insert);
}
}
}