2011-07-01 8 views
2

HTML 웹 페이지에 일련의 키워드가 있습니다. 쉼표로 구분되어 있기 때문에 CSV 파일로 가져올 수 있으며 HTML 웹 페이지로 표시되는 다른 CSV 파일에는 어떤 파일인지 알기를 원합니다. 어떻게 비교 하시겠습니까? mysql과 테이블에 대한 아이디어가 있지만 이것은 CSV 또는 html 소스이다. 감사합니다.페이지 또는 CSV 파일의 키워드 비교 : PHP? 세게 때리다?

+0

당신이 문제를 조금 명확히 할 수? csv와 csv 또는 html을 비교하려고하는지 혼란 스럽습니다. 언급 된 데이터의 몇 가지 예를 게시 할 수 있습니까? – Itako

답변

1

이 스크립트는 a.csv 및 b.csv 파일 2 개를 제공하며 주어진 a.csv에 b가없는 모든 파일을 포함하는 새 파일 out.csv를 만듭니다 (또는 이미 존재하는 경우 편집). .csv.

import urllib 

url = 'http://www.website.com/x.csv' 
urllib.urlretrieve(url, 'b.csv') 


file_a = open('a.csv', 'r') 
file_b = open('b.csv', 'r')  
file_out = open('out.csv', 'w') 

list_a = [x.strip() for x in file_a.read().split(',')] 
list_b = [x.strip() for x in file_b.read().split(',')]  
list_out = list(set(list_a) - set(list_b)) # Reverse if necessary 

file_out.write(','.join(list_out)) 
file_out.close() 
+0

흥미로운 것 같습니다. 두 번째 CSV가 다른 사이트에서 업데이트되므로 절대 URL에서 호출 할 수있는 방법이 있습니까? 이미 로컬에 첫 번째 CSV 파일이 있으며 변경되지 않습니다. – Denis

+0

절대 URL로 시도해보십시오 :) – Denis

+0

먼저 다른 사이트의 csv 파일을 다운로드하도록 업데이트했습니다. – msrxthr

1

키워드 목록 일 경우 검색을 수행하고 sed를 사용하여 모든 쉼표를 캐리지 리턴으로 바꿉니다. 따라서 각 행에 하나의 키워드가 들어있는 파일로 끝납니다. 두 버전의 목록 모두에 대해 그렇게하십시오. 그런 다음 "조인"명령을 사용하십시오.

join -v 1 leftfile rightfile 

이렇게하면 rightfile에없는 모든 항목이 leftfile에보고됩니다. 먼저 파일을 정렬하는 것을 잊지 마십시오. 그렇지 않으면 조인이 작동하지 않습니다. 정렬을위한 bash 도구도 있습니다. (그것은 놀랍지 않게 "정렬"이라고 불립니다.)

1

PHP 솔루션 .. 문자열, 배열에 다음 변환 array_diff 기능을 사용할 때 키워드보기 :

<?php 
$csv1 = 'a1, a2, a3, a4'; 
$csv2 = 'a1, a4'; 

$csv1_arr = explode(',', $csv1); 
$csv2_arr = explode(',', $csv2); 

$diff = array_diff($csv1_arr, $csv2_arr); 
print_r($diff); 

>