Python:无法将5个列表的元组打印到文件中

Python:无法将5个列表的元组打印到文件中,python,list,tuples,Python,List,Tuples,我试图用Python将一个包含5个列表的元组打印到一个文件中,但是,出现了以下错误: TypeError: Can't convert 'tuple' object to str implicitly 以下是我的代码: def listjoin(): illegallist = zip(carreglist, illegalspeed, illegaltime, illegalname, illegaladdress) for item in illegallist: illegald

我试图用Python将一个包含5个列表的元组打印到一个文件中,但是,出现了以下错误:

TypeError: Can't convert 'tuple' object to str implicitly
以下是我的代码:

def listjoin():
illegallist = zip(carreglist, illegalspeed, illegaltime, illegalname, illegaladdress)
for item in illegallist:
    illegaldatafile.write("Registration: "+item)
    illegaldatafile.write("\n")
    illegaldatafile.write("Speed "+item)
    illegaldatafile.write("\n")
    illegaldatafile.write("Time: "+item)
    illegaldatafile.write("\n")
    illegaldatafile.write("Name: "+item)
    illegaldatafile.write("\n")
    illegaldatafile.write("Address: "+item)
    illegaldatafile.write("\n")
    illegaldatafile.write("\n")
    illegaldatafile.close()
我想得到这样的东西:

Registration: BH34JKX
Speed: 80
Time: 6:45:21
Name: John Adams
Address: SW34 7MN

Registration: DX34JKS
等等。。 (不小心发布得太早)

在代码的前面,我将一个列表打印到一个文件中,它不需要转换为字符串。我不能这样做:

illegallist = zip(str(carreglist, illegalspeed, illegaltime, illegalname, illegaladdress))
因为str()只接受3个参数。 我试着把它放在这里:

illegallist = str(zip(carreglist, illegalspeed, illegaltime, illegalname, illegaladdress))

但它只是说我的文件已关闭。

您正在将同一个元组
一次又一次地附加到字符串。您必须从这个元组中获取单个元素。这是我(更紧凑)的建议:

colnames = ['Registration', 'Speed', 'Time', 'Name', 'Address']
for tup in zip(carreglist, illegalspeed, illegaltime, illegalname, illegaladdress):
    for colname, value in zip(colnames, tup):
        illegaldatafile.write('{}: {}\n'.format(colname, value))
    illegaldatafile.write('\n')

不要简单地调用每个循环迭代的项
item
,而应该将其解压缩,以便更容易地引用每个对象。字符串格式也很有用:

def listjoin():
    illegallist = zip(carreglist, illegalspeed, illegaltime, illegalname, illegaladdress)
    for reg,speed,timing,name,address in illegallist:
        illegaldatafile.write("Registration: {}\n".format(reg))
        illegaldatafile.write("Speed: {}\n".format(speed))
        illegaldatafile.write("Time: {}\n".format(timing))
        illegaldatafile.write("Name: {}\n".format(name))
        illegaldatafile.write("Address: {}\n\n".format(address))
    illegaldatafile.close()

您可以使用带有
file
参数的
print
语句,如果只有5个元组,则可以使用
%

def listjoin():
    illegallist = zip(carreglist, illegalspeed, illegaltime, illegalname, illegaladdress)
    for item in illegallist:
        print("Registration: %s" % item[0], file=illegaldatafile)
        print("Speed: %s" % item[1], file=illegaldatafile)
        print("Time: %s" % item[2], file=illegaldatafile)
        print("Name: %s" % item[3], file=illegaldatafile)
        print("Address: %s" % item[4], file=illegaldatafile)
        print(file=illegaldatafile)
    illegaldatafile.close()

1.您只能将字符串写入文件。2.为什么要在每一行上写完全相同的对象(
item
),并期望每次都能产生不同的结果?打开列表,如果不是字符串,则将其转换为字符串。@MalikBrahimi:你的意思是“打开元组”。1)Python 3的
str
构造函数最多可以使用3个参数,但只有第一个参数是要转换为字符串的对象;其他2个参数与字符串的编码有关,请参阅以了解详细信息。2) 您不应该在
for
循环中关闭文件。只有当你写完所有的东西后才能关闭它。更好的方法是,使用
with
语句,这样文件会自动关闭。对不起,TigerhawkT3的响应看起来更像我自己的响应,我不想做太多更改。