2016-09-28 142 views
0

我寫了一個小型python代碼,它將讀取一個示例csv文件並將其第一列複製到一個臨時csv文件。現在,當我嘗試將該臨時文件與另一個文本文件進行比較並嘗試將結果寫入另一個稱爲結果文件的文件時,該文件將被創建但空內容。解析後寫入文件

但是,當我在塊測試它,它工作正常

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

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

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

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

sample.csv

M11435TDS144,STB#1,路由器#1

M11543TH4292,STB#2 ,Router#1

M11509TD9937,STB#3,Router#1

M11543TH4258,STB#4,路由器#1

serialNumber.txt

G1A114042400571

M11543TH4258

M11251TH1230

M11435TDS144

M11543TH4292

M11509TD9937

+0

'same'可能是空的嗎? – ozgur

+0

感謝您的評論。你可以說你的意思是什麼,也可能是空的? –

+0

考慮到你的代碼,最後一行'print line'實際上是否打印了某些東西? @ozgur在詢問'file1'和'file2'之間的'intersection'是否可能爲空。 – sal

回答

0

你應該關閉輸出文件(temp1.csv),你可以從中讀取數據之前。

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

data = open("temp1.csv", "w") 
w = csv.writer(data) 
for row in reader: 
    my_row = [] 
    my_row.append(row[0]) 
    w.writerow(my_row) 
data.close() # <--- Should close it before reading it in the same program !! 

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

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

謝謝Enix ...但它仍然是同樣的問題..當我執行它時,沒有任何內容正在寫入結果文件關閉文件後。是否從sample.csv中取出第一列並將其複製到temp1.csv中的邏輯不正確? –

+0

只需執行前幾行代碼,直到'data.close()'行得到'temp1.csv'中的正確結果爲止? – Enix

+0

是Enix..a temp1.csv是用數據創建的 –

0

關於代碼點:

  • data文件句柄沒有關閉。在寫入temp1.csvdata.close()
  • 在您的代碼same = set(file1).intersection(file2)中,您直接將文件句柄file2傳遞到交點。它期望列表。這確切的問題是。它應該是same = set(file1.readlines()).intersection(file2.readlines())

工作代碼:temp1.csv的

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 = [] 
    if len(row) != 0: 
     my_row.append(row[0]) 
     w.writerow(my_row) 
#File should be closed 
data.close() 

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


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

內容:的Result.txt的

M11435TDS144 
M11543TH4292 
M11509TD9937 
M11543TH4258 

內容:

M11543TH4258 
M11543TH4292 
M11435TDS144 

您可以使用with打開文件sample.csvtemp1。csv如下。

import csv 

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


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

with open('result.txt', 'w') as file_out: 
    for line in same: 
     file_out.write(line) 
+0

Hii Dinesh ..謝謝你的回覆。我的結果文件仍然沒有顯示任何數據 –

+0

你可以在相同= set(list(file1))。intersection(list(file2))之後添加print(相同)並給我輸出嗎? –

+0

輸出結果爲:set([]) –