解析后写入文件

2024-04-27 04:41:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经编写了一个小python代码,它将读取一个示例csv文件并将其第一列复制到一个temp csv文件。现在,当我尝试将该临时文件与另一个文本文件进行比较,并尝试将结果写入另一个名为result file的文件时,该文件已创建,但内容为空。你知道吗

但当我测试了它在块,它是工作良好

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

你知道吗示例.csv你知道吗

M11435TDS144,STB#1,Router#1

M11543TH4292,STB#2,Router#1

M11509TD9937,STB#3,Router#1

M11543TH4258,STB#4,Router#1

你知道吗序列号.txt你知道吗

G1A114042400571

M11543TH4258

M11251TH1230

M11435TDS144

M11543TH4292

M11509TD9937


Tags: 文件csvtxt示例myaswithline
2条回答

您应该先关闭输出文件(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

有关代码的要点:

  • data文件句柄未关闭。data.close()在写入temp1.csv之后。你知道吗
  • 在代码same = set(file1).intersection(file2)中,直接将文件句柄file2传递给交集。它需要一个列表。这正是问题所在。应该是same = set(file1.readlines()).intersection(file2.readlines())

工作代码:

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)

temp1.csv的内容:

M11435TDS144
M11543TH4292
M11509TD9937
M11543TH4258

内容结果.txt:

M11543TH4258
M11543TH4292
M11435TDS144

您可以使用with打开文件示例.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)

相关问题 更多 >