gpt4 book ai didi

python - 类型错误 : expected a character buffer object

转载 作者:太空狗 更新时间:2023-10-29 20:38:58 26 4
gpt4 key购买 nike

我正在尝试将列表的列表写入新文件,但出现此错误:

Traceback (most recent call last): File "", line 1, in dowork() File "C:\Python27\work\accounting\formatting quickbooks file\sdf.py", line 11, in dowork WriteFile() File "C:\Python27\work\accounting\formatting quickbooks file\sdf.py", line 71, in WriteFile f.write(thefile) TypeError: expected a character buffer object

如何将列表的列表写入文件?

我是这样写的:

def WriteFile():
global thefile
f = open("output"+'.csv','w')
f.seek(0)
f.write(thefile)
f.close()

如果您需要,这里是完整的源代码:

import csv

thefile = []
output = []

def dowork():
sourceFile='e.csv'
thefile=ReadFile(sourceFile)
CleanFile(sourceFile)
ProcessFile()
WriteFile()

def ReadFile(filename):
return list(csv.reader(open(filename, 'rb'), delimiter=',', quotechar='"'))[1:]

def CleanFile(sourceFile):
global thefile
thefiletmp=[]
for i, line in enumerate(thefile):
if line[2]=='':
del thefile[i]
else:
thefiletmp.append(line[4:])
thefile=thefiletmp


def ProcessFile():
global thefile
iCompany=1
iNum=0
iDate=2
iAging=3
iBalance=4
COMPANIES=GetDistinctValues(1)
mytemparray=[]
mytempfile=[]
for company in COMPANIES:
for line in thefile:
if line[iCompany]==company:
mytemparray.append(line[iCompany])
mytemparray.append(line[iNum])
mytemparray.append(line[iDate])
if line[2] in range(0,31):
mytemparray.append(line[iBalance])
mytemparray.append('0')
mytemparray.append('0')
mytemparray.append('0')
if line[2] in range(31,61):
mytemparray.append('0')
mytemparray.append(line[iBalance])
mytemparray.append('0')
mytemparray.append('0')
if line[2] in range(61,91):
mytemparray.append('0')
mytemparray.append('0')
mytemparray.append(line[iBalance])
mytemparray.append('0')
if line[2] >90:
mytemparray.append('0')
mytemparray.append('0')
mytemparray.append('0')
mytemparray.append(line[iBalance])
mytempfile.append(mytemparray)
mytemparray=[]
thefile=mytempfile

def WriteFile():
global thefile
f = open("output"+'.csv','w')
f.seek(0)
f.write(thefile)
f.close()

def GetDistinctValues(theColumn):
return sorted(list(set(line[theColumn] for line in thefile)))

最佳答案

错误消息是说您不能将列表写入文件,只能将“字符缓冲区对象”写入文件,这意味着字符串或其他类似字符串的东西。

如果您只想将列表写入文件,就像将它们打印到控制台一样,您可以编写 str(thefile)repr(thefile)(甚至在 print 中使用重定向语法,而不是使用 file.write)。

但是您正在使用 csv 模块来读取输入,并且可能希望以相同的格式输出,因此您可能希望使用 csv 来编写它也是。

你正在这样阅读:

list(csv.reader(open(filename, 'rb'), delimiter=',', quotechar='"'))[1:]

所以这样写:

csv.writer(open('foo.csv', 'wb'), delimiter=',', quotechar='"').writerows(thefile)

我应该提一下,我一开始不会像这样构建代码;我会做这样的事情:

with open('input.csv', 'rb') as infile, open('output.csv', 'wb') as outfile:
incsv = csv.reader(infile, delimiter=',', quotechar='"')
outcsv = csv.writer(outfile, delimiter=',', quotechar='"')
incsv.read() # skip first line
for line in incsv:
if line[3] != '':
outcsv.write(ProcessLine(line))

关于python - 类型错误 : expected a character buffer object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12592544/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com