2016-09-28 9 views
0

У меня есть код python, где он возьмет первый столбец файла sample.csv и скопирует его в файл temp1.csv. Теперь я хотел бы сравнить этот файл csv с другим файлом serialNumber.txt для любых обычных строк. Если найдены какие-либо общие строки, он должен записать в файл результата. Мой temp1.csv создается правильно, но проблема заключается в том, что созданный файл результата пуст.Запись файла не работает, как ожидалось

script.py

import csv 
f = open("sample.csv", "r") 
reader = csv.reader(f) 

data = open("temp1.csv", "wb") 
w = csv.writer(data) 
for row in reader: 
    my_row = [] 
    my_row.append(row[0]) 
    w.writerow(my_row) 
data.close() 

with open('temp1.csv', 'r') as file1: 
    with open('serialNumber.txt', 'r') as file2: 
     same = set(file1).intersection(file2) 
     print same 

with open('result.csv', 'w') as file_out: 
    for line in same: 
     file_out.write(line) 
     print line 

sample.csv

M11435TDS144,STB#1,Router#1 
M11543TH4292,STB#2,Router#1 
M11509TD9937,STB#3,Router#1 
M11543TH4258,STB#4,Router#1 

serialNumber.txt

G1A114042400571 
M11543TH4258 
M11251TH1230 
M11435TDS144 
M11543TH4292 
M11509TD9937 
+0

file1 и file2, как вы их объекты файл, таким образом, они не могут быть одинаковыми. Вам нужно прочитать каждую строку на каком-то объекте (работает набор), а затем пересечь два набора. – PyNEwbie

+0

Когда вы читаете 'temp1.csv', вам нужно использовать' csv.reader' вместо того, чтобы читать его как простой файл? – CAB

ответ

0
with open('temp1.csv', 'r') as file1: 
    list1 = file1.readlines() 

set1 = set(list1) 

with open('temp2.csv', 'r') as file2: 
    list2 = file2.readlines() 

set2 = set(list2) 

теперь вы можете обрабатывать содержимое как наборы

Я хочу отметить, что ваш исходный код не вставляет разрывы строк после каждой строки, поэтому я не уверен, что они будут присутствовать. Если вам не нужно добавить те, в противном случае вы будете иметь беспорядок

0

Вы, вероятно, хотите, чтобы это вместо

same = set(list(file1)).intersection(list(file2))