[英]Python Script for comparing multiple columns in 2 csv files
希望有人可以幫助我或將我指向包含正確信息的以前的帖子(我已經搜索了一段時間但沒有成功),
我真的是 Python 腳本的新手,我正在花時間學習以提高我的技能,但是我在學習時突然需要執行以下操作 - 我希望這將幫助我在學習基礎知識的同時更多地了解 Python別處
我有兩個 CSV 的列數據相同但標題不同 - 下面的示例
----$csv1------
ID, FirstName, Surname
1, John, Smith
2, Steve, Davis
, John,Parrot,
4, Dave,Smith
5, Alan, Taylor
----$csv2------
Employee ID, First Name, Given Surname
1, John, Smith
2, Steven, Davis
3, John, Parrott
4, Dave, Allen
6, Mike, Angelo
我的腳本要求是比較 2 個 csv 並使用結果創建第三個文件 (results.csv)
我知道這是一個很大的問題,但如果有人能提供一個帶有一些解釋的腳本來幫助我完成我的 Python 之旅,我將不勝感激!
謝謝大家。
----添加腳本------
import csv
CSV1_tuples = []
CSV2_tuples = []
with open("DB1.csv") as CSV2:
csv_CSV2 = csv.reader(CSV2)
for row in csv_CSV2:
CSV2_tuples.append(tuple(row[0:3]))
with open("DB2.csv") as CSV1:
csv_CSV1 = csv.reader(CSV1)
for row in csv_CSV1:
CSV1_tuples.append(tuple(row[0:3]))
if tuple(row[0:3]) in CSV2_tuples:
print(( row[0:3] ), "In both DB1 & DB2")
if tuple(row[1:3]) in CSV2_tuples:
print(( row[0:3] ), "Wrong ID")
import csv
import re
def get_csv_data(csv_file, row, cell=None):
"""
:param csv_file: Name of csv file
:param row: Row number that you want( counting starts from top to bottom)
:param cell: cell number that you want(counting starts from left to right)
If you give a cell number, the content of that cell will be returned.
If cell =
:return: cell content
"""
ls = []
with open(csv_file, newline='') as csvfile:
csv_file = csv.reader(csvfile, delimiter=' ', quotechar='|')
for rows in csv_file:
ls.append(str(rows[0]).split(","))
if cell is not None:
return re.sub(r'\W+', '', str(ls[row-1]).split(",")[cell-1])
else:
return ls[row-1]
print(get_csv_data('csv1.csv', 2, 2)) #get row 2, cell 2 from csv1 -> returns John
print(get_csv_data('csv1.csv', 2)) #get row 2 from csv1 -> returns a list with all values from the row: [1, 'John', 'Smith']
def write_to_csv(ls):
"""
:param ls: list argument to be written in CSV file
List item will be written as a row, with every list value on a separate cell
:return: None
"""
with open("results.csv", "w") as f:
writer = csv.writer(f)
writer.writerow(ls)
這是從 CSV 文件中獲取數據並寫入另一個文件的方式。 您可以進一步實現 if 語句
row = get_csv_data('csv1.csv', 1) #get first row from csv1.csv, as a list
row.append("Correct") #add the Correct value
write_to_csv(row) #write all row 1 to CSV - will be 1, John, Smith, Correct
我必須比較兩個與示例類似的文件,但只會使用 IP 來查看第 1 列。 文件 1(都是文本文件)
文件1.txt
IP - MAC 地址 - 端口 - IDF 1 0.2.1.5 00:07:5f:c2:9b:f2 gi1/0/2 2 10.2.1.3 0007.5fc2.9bf4 gi1/0/3 3 10.2.1.7 0007.9bf5f gi1/0/4 4
文件2.txt
IP - MAC 地址 - 端口 10.2.1.5 0007.5fc2.9bf6 gi1/0/2 10.2.1.9 0007.5fc2.9bf7 gi1/0/2 10.2.1.10 0007.5fc2.9bf8/2 gi/1
輸出文件( result.file )將匹配 IP 和其余內容 所以它只匹配 IP 並將放置來自文件 1 結果文件的其余內容
10.2.1.5 00:07:5f:c2:9b:f2 gi1/0/2 2 謝謝
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.