Python 将使用zip创建的元组打印到文本文件
第一次使用python是今天,所以请原谅我有点垃圾。这是基本代码,我知道它是有效的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
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种不同的方法之后,我应该知道它们不太可能都错了。我一直启用打印行进行调试,谁会想到调试行会导致错误。谢谢