[英]PHP- Compare two CSV files, look for duplicates and remove matching rows from one of the files
我正在努力學習PHP,自己動手做一些事情。 但是這部分讓我陷入困境。
我有兩個CSV文件,每個文件都有數百行。
CSV 1看起來像這樣:
名稱,電子郵件,興趣
CSV 2看起來像這樣:
僅電子郵件
我正在嘗試編寫一個腳本來比較兩個文件是否重復。 我只想保留重復項。 但是如您所見,CSV 2僅包含一封電子郵件。 如果CSV 2中不存在CSV 1中的電子郵件,則應刪除CSV 1中包含該電子郵件的行。
最終結果可以覆蓋CSV 1或創建一個名為“ final.csv”的新文件。
我將不勝感激。
我沒有碰到運氣就嘗試了以下方法:
egrep -v $(cat csv2.csv | tr '\n' '|' | sed 's/.$//') csv1.csv
和
grep -v -f csv22.csv csv1.csv >output-file
干杯,
渣
這是一個腳本,它將遍歷兩個文件並輸出第三個文件,其中在file1中找到了file2中的電子郵件地址。
if (($file3 = fopen("file3.csv", "w")) !== FALSE) {
if (($file1 = fopen("file1.csv", "r")) !== FALSE) {
while (($file1Row = fgetcsv($file1)) !== FALSE) {
if (($file2 = fopen("file2.csv", "r")) !== FALSE) {
while (($file2Row = fgetcsv($file2)) !== FALSE) {
if ( strtolower(trim($file2Row[0])) == strtolower(trim($file1Row[1])) )
fputcsv($file3, $file1Row);
}
fclose($file2);
}
}
fclose($file1);
}
fclose($file3);
}
幾個注意事項:
$file1Row[1]
和$file2Row[0]
。 列號從0開始。 $file3
fopen的第二個參數更改為“ a”而不是“ w” 例:
file1.csv:
john,john@foobar.com,blah
mary,mary@blah.com,something
jane,jan@something.com,blarg
bob,bob@test.com,asdfsfd
file2.csv
mary@blah.com
bob@test.com
file3.csv(生成)
mary,mary@blah.com,something
bob,bob@test.com,asdfsfd
解決了! 問題出在Mac換行符上。 查看下面的代碼,以查看在代碼開頭和結尾處添加的內容以解決該問題。 感謝Crayon Violent的所有幫助!
ini_set('auto_detect_line_endings',TRUE);
if (($file3 = fopen("output.csv", "w")) !== FALSE) {
if (($file1 = fopen("dirty.csv", "r")) !== FALSE) {
while (($file1Row = fgetcsv($file1)) !== FALSE) {
if (($file2 = fopen("clean.csv", "r")) !== FALSE) {
while (($file2Row = fgetcsv($file2)) !== FALSE) {
if ( strtolower(trim($file2Row[0])) == strtolower(trim($file1Row[1])) )
fputcsv($file3, $file1Row);
}
fclose($file2);
}
}
fclose($file1);
}
fclose($file3);
}
ini_set('auto_detect_line_endings',FALSE);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.