2016-12-21 77 views
-1

我有兩個文件,如下所示,第一個目標是通過比較第一列的前14位數字來獲取1.csv和2.csv中不常見的行。Python腳本查找不常見的行

第二個目標是如果1.csv中的第一列與2.csv中的任意第一列匹配,則將第二列與第二列1.csv中的第二列進行比較,並打印出不存在1.csv並呈現2.csv

的腳本如下如下,但沒能獲得所需的輸出

import csv 
t1 = open('1.csv', 'r') 
t2 = open('2.csv', 'r') 
fileone = t1.readlines() 
filetwo = t2.readlines() 
t1.close() 
t2.close() 

outFile = open('update.csv', 'w') 
x = 0 
for i in fileone: 
    if i != filetwo[x]: 
     outFile.write(filetwo[x]) 
    x += 1 
outFile.close() 
+0

正確的工具,這樣做,是大熊貓http://pandas.pydata.org/ – Charlie

回答

0

如果格式被給定的固定這將是分裂的解決方案每行分成兩部分,因此您可以根據需要只比較前14位數字。

您的解決方案只能逐行比較。如果分割線條,您可以迭代任何一個文件的數據,並使用簡單的'in'來查看該線條是否在另一個文件中。

+0

感謝..格式是固定 – kto

0

的第一件事總是使用with處理文件時,它會採取一個線少,絕不會忘記關閉文件:

with open('1.csv', 'r') as file1, open('2.csv', 'r') as file2: 
    file1_lines = file1.readlines() 
    file2_lines = file2.readlines() 

file1_headers = [line[:14] for line in file1_lines] 
file2_headers = [line[:14] for line in file2_lines] 

with open('update.csv', 'w') as out_file: 
    # Objective 1: lines that have their first 14 digit in one file only 
    for line in file1_lines: 
     if line[:14] not in file2_headers: 
      out_file.write(line) 
    for line in file2_lines: 
     if line[:14] not in file1_headers: 
      out_file.write(line) 
    # Objective 2: Lines that are in file 2 but not 1 
    for line in file2_lines: 
     if line not in file1_lines: 
      out_file.write(line) 

您的代碼中沒有提到任何地方14,應該提醒您在第一名;-)乾杯!

+0

確定,當我執行你的腳本,它拋出這個錯誤 – kto

+0

蟒蛇4.py 回溯(最近最後調用): 文件「4.py」,4號線,在 file1_lines = fh1.readlines() NameError:名字「FH1」沒有定義 – kto

+0

很抱歉,在變量名我編輯 – Saksow