写入文件不能在Python 3.5中工作
问题描述:
我写了下面的代码来获取xlsx文件的第四列,并将其保存在csv文件中(如果有的话)。但它给出了以下错误:ValueError: write to closed file
。写入文件不能在Python 3.5中工作
from __future__ import division, print_function
import sys
import numpy as np
import csv
import os
import xlrd
import csv
import unicodecsv
def xls_to_csv1(xls_filename, csv_filename):
wb = xlrd.open_workbook(xls_filename)
sh = wb.sheet_by_index(0)
with open(csv_filename,"wb") as fh:
csv_out = unicodecsv.writer(fh, encoding='utf-8', delimiter=';')
#print(sh.row_values(1)[3])
for row_number in range (1, sh.nrows):
row = []
count=0
for col in sh.row_values(row_number):
if count==3:
row.append(col)
count=count+1
csv_out.writerow(row)
xls_filename='Attachment_1_Test_Data_1_Seed.xlsx'
csv_filename='Summary_csv.csv'
xls_to_csv1(xls_filename,csv_filename)
答
将数据附加到csv文件的过程应在with_statement
内完成。这是因为通过所谓的context manager
支持with_statement
。基本上,这意味着如果您使用with_statement
打开文件,则退出with_statement
会关闭该文件。这就是为什么你看到closed file
错误。以下应该做的:
from __future__ import division, print_function
import sys
import numpy as np
import csv
import os
import xlrd
import csv
import unicodecsv
def xls_to_csv1(xls_filename, csv_filename):
wb = xlrd.open_workbook(xls_filename)
sh = wb.sheet_by_index(0)
with open(csv_filename,"wb") as fh:
csv_out = unicodecsv.writer(fh, encoding='utf-8', delimiter=';')
#print(sh.row_values(1)[3])
for row_number in range (1, sh.nrows):
row = []
count=0
for col in sh.row_values(row_number):
if count==3:
row.append(col)
count=count+1
csv_out.writerow(row)
我希望这有助于。
因为'Book'对象没有'.split'方法,所以代码不应该在任何版本的python中运行。将'wb = xlrd.open_workbook(xls_filename).split()'更改为'wb = xlrd.open_workbook(xls_filename)'。 – Abdou
但它在Python 2.7上工作。无论如何,当我删除拆分;它会给出一个令人惊讶的错误:'ValueError:写入封闭文件。但是它是如何关闭的?我以“wb”模式打开它。 – Kristada673
(1)我非常有信心你的问题中显示的代码在Python 2.7中不起作用。如果你确实有Python 2.7的代码,那么你可能没有把它正确地转换成这个问题。 (2)无论如何你想用'split'做什么?你说它在Python 2.7中工作。它在工作时做了什么? –