Python 将使用zip创建的元组打印到文本文件

Python 将使用zip创建的元组打印到文本文件,python,python-3.x,file-io,tuples,Python,Python 3.x,File Io,Tuples,第一次使用python是今天,所以请原谅我有点垃圾。这是基本代码,我知道它是有效的 from lxml import html import lxml import requests sourcepage = requests.get('http://www.bbc.co.uk/sport/football/championship/table') tree = html.fromstring(sourcepage.content) teamname = tree.xpath('descen

第一次使用python是今天,所以请原谅我有点垃圾。这是基本代码,我知道它是有效的

from lxml import html
import lxml
import requests

sourcepage = requests.get('http://www.bbc.co.uk/sport/football/championship/table')
tree = html.fromstring(sourcepage.content)

teamname = tree.xpath('descendant::table[1][@class = "table-stats"]/tbody/tr/td[@class = "team-name"]/a/text()')
position = tree.xpath('descendant::table[1][@class = "table-stats"]/tbody/tr/td[@class = "position"]/span[@class = "position-number"]/text()')
movement = tree.xpath('descendant::table[1][@class = "table-stats"]/tbody/tr/td[@class = "position"]/span[@class="moving-down" or @class="no-movement" or @class="moving-up"]/text()')
goaldiff = tree.xpath('descendant::table[1][@class = "table-stats"]/tbody/tr/td[@class = "goal-difference"]/text()')
points  =  tree.xpath('descendant::table[1][@class = "table-stats"]/tbody/tr/td[@class = "points"]/text()')

combined = zip(teamname,position,movement,goaldiff,points)
它所做的是刮取一个网站,另存为一棵树,然后把它变成一个元组(我想)

该表将使用

print("Pos. | Team | P | GD | Pts\n:--:|:--|:--:|:--:|:--:")
for var1,var2,var3,var4,var5 in combined:
    print(var1,"|",var2,var3,"|",var4,"|",var5)
但我在把它打印成文件方面遇到了严重的问题

我尝试了以下方法:

outfile = open('output.txt', 'w')
print>>outfile("Pos. | Team | P | GD | Pts\n:--:|:--|:--:|:--:|:--:")
for var1,var2,var3,var4,var5 in combined:
    print>>outfile(var1,"|",var2,var3,"|",var4,"|",var5)
outfile.close()
这一个输出一个错误-TypeError:“\u io.TextIOWrapper”对象不可调用

with open('output.txt', 'w') as fp:
    fp.write("Pos. | Team | P | GD | Pts\n:--:|:--|:--:|:--:|:--:\n")
    for var1,var2,var3,var4,var5 in combined:
        var1s = str(var1)
        print("debug: var1 / var1s set to: ",var1,var1s) #prints nothing (?)
        var2s = str(var2)
        var3s = str(var3)
        var4s = str(var4)
        var5s = str(var5)
        fp.write(var1s+"|"+var2s+var3s+"|"+var4s+"|"+var5s+"\n")
这仅输出标题行

(var1a, var2a, var3a, var4a, var5a) = combined
 var1a, var2a, var3a, var4a, var5a = combined
print(var1a)
两人都让我吃惊,因为他们都返回了ValueError:没有足够的值来解包(预期为5,得到0)

这将输出一个空白文件,就像输出一样

outfile = open('outfile.txt', 'w')
for t in combined:
    line = ' '.join(str(x) for x in t)
    outfile.write(line + '\n')
outfile.close()

我花了几个小时在谷歌上搜索,试图通过stackoverflow问题找到解决办法,但我还是做得不够,我在这里有点不知所措


我想将其输出到文件的原因是,在这之后的下一步是在输出上运行一些正则表达式,以将使用的截断名称转换回正确的名称,此外,还可以将一些reddit标记环绕在该文件周围,将其转换为链接。

在将
组合的
zip打印到控制台后,您似乎试图写入该文件。在Python3中,生成一个生成器,也就是说,在迭代一次之后,它将耗尽

>>> z = zip([1,2,3],[4,5,6])
>>> list(z)
[(1, 4), (2, 5), (3, 6)]
>>> list(z)
[]
首先将生成器转换为列表,即
combined=list(zip(…)
,或者如果不需要,只删除打印到控制台部分


一旦解决了这个问题,任何将值写入文件的方法都应该有效——第一种除外。Python 2中的
print>>outfile(params)
语法在Python 3中是非法的。这将尝试使用
参数调用
输出文件
(因此不可调用异常),然后将
>
函数右移
打印
。。。不管那是什么意思。相反,您需要打印(params,file=outfile)
,或者只使用任何其他方法。

似乎您在已将
组合的
zip打印到控制台后尝试写入文件。在Python3中,生成一个生成器,也就是说,在迭代一次之后,它将耗尽

>>> z = zip([1,2,3],[4,5,6])
>>> list(z)
[(1, 4), (2, 5), (3, 6)]
>>> list(z)
[]
import sys
sys.stdout=open("test.txt","w")

print("Pos. | Team | P | GD | Pts\n:--:|:--|:--:|:--:|:--:")
for var1,var2,var3,var4,var5 in combined:
    print(var1,"|",var2,var3,"|",var4,"|",var5)

sys.stdout.close()
首先将生成器转换为列表,即
combined=list(zip(…)
,或者如果不需要,只删除打印到控制台部分

一旦解决了这个问题,任何将值写入文件的方法都应该有效——第一种除外。Python 2中的
print>>outfile(params)
语法在Python 3中是非法的。这将尝试使用
参数调用
输出文件
(因此不可调用异常),然后将
>
函数右移
打印
。。。不管那是什么意思。相反,您需要打印(params,file=outfile)
,或者只使用任何其他方法

import sys
sys.stdout=open("test.txt","w")

print("Pos. | Team | P | GD | Pts\n:--:|:--|:--:|:--:|:--:")
for var1,var2,var3,var4,var5 in combined:
    print(var1,"|",var2,var3,"|",var4,"|",var5)

sys.stdout.close()
看起来很有效,但有点作弊


似乎有效,但有点作弊。

在尝试了4种不同的方法后,我应该知道它们不太可能都错了。我一直启用打印行进行调试,谁会想到调试行会导致错误。谢谢。在尝试了4种不同的方法之后,我应该知道它们不太可能都错了。我一直启用打印行进行调试,谁会想到调试行会导致错误。谢谢