2016-09-28 94 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([]) –