【问题标题】:Taking Output and Inputting it输出和输入
【发布时间】:2013-05-06 02:21:14
【问题描述】:

我正在编写一个程序,当程序从网站解析我的成绩时,它会将我的学校成绩作为我的桌面背景并将它们全部返回

从学校成绩网站检索成绩的代码:

for cell in driver.find_elements_by_css_selector(".grid tr a[href$='fg=S2']"):
    print cell.text

cell.text 返回为

--
B
84
--
A-
90
--
C+
79
--
A
95
--
B
82
--
B
81

但是我需要将它输入回我的桌面 BG 的图像中

font = ImageFont.load_default() 
img = Image.open('bg.bmp')
draw = ImageDraw.Draw(img)

now = datetime.datetime.now()


draw.text((650, 450),'                      CURRENT GRADES' )
draw.text((650, 500), 'Period 1: Geography -----------------------------')#First Grade
draw.text((650, 550), 'Period 2: Francais-------------------------------')#Second Grade
draw.text((650, 600), 'Period 3: Science--------------------------------')#Third Grade
draw.text((650, 650), 'Period 4: P.E------------------------------------')#Fourth Grade
draw.text((650, 700), 'Period 5: Algebra 9------------------------------')#Fifth Grade
draw.text((650, 750), 'Period 6: LA-------------------------------------')Sixth grade
draw.text((650, 800), 'Last Updated: {0}'.format(now))
draw = ImageDraw.Draw(img)
draw = ImageDraw.Draw(img)
img.save('mod_bg.bmp')

当成绩返回时,我需要将它们放入每个班级

如果需要任何信息,请询问 谢谢

【问题讨论】:

  • 你的问题是如何把cell.text的数据放到图片上?你的代码到底有什么问题?
  • 我需要将每个年级分开并作为变量放入每个科目,但我不知道如何

标签: python parsing input python-imaging-library output


【解决方案1】:

如果您在从字符串cell.text 中获取数据时遇到困难,那么您可能需要以下内容。

我已经把数据放到一个字符串中,这样我们就有了一个独立的测试:

grades = """--
B
84
--
A-
90
--
C+
79
--
A
95
--
B
82
--
B
81"""

gradesList = grades.split('\n')
letterGrade = gradesList[1::3]
pctGrade = [int(x) for x in gradesList[2::3]]

for i in range(len(letterGrade)):
    print ("%s\t%d" % (letterGrade[i],pctGrade[i]))

...我将结果打印到控制台而不是将其放入图像中,但@TankorSmash 已经展示了如何做后半部分。

这个程序的输出是:

B       84
A-      90
C+      79
A       95
B       82
B       81

有关拆分多行字符串的更多信息,请参阅here。有关具有三个限制的切片列表的更多信息,请参阅here

【讨论】:

  • 这并不总是数据,尽管它会在成绩更新时发生变化,所以我需要获取每个数字并为每个成绩分配一个变量
  • 您只想对cell.text 做同样的事情,因为它是从学校成绩网站获得的,就像我在我的程序中对grades 所做的那样,即gradesList = cell.text.split('\n')。我没有这样做的原因是让我的程序成为Short, Self Contained, Correct (Compilable), Example
  • 它告诉我列表索引超出范围?
  • 如果gradesList 的元素少于2 个,您将在letterGrade = gradesList[1::3]pctGrade = [int(x) for x in gradesList[2::3]] 行得到一个“超出范围的索引”。如果您在这些行之前尝试print gradesList,那应该确认具有所需数量的元素。如果gradesList 不包含您期望的列表,请尝试print cell.text 以确保它实际上包含您期望的项目,每个项目都位于单独的行中。我没有使用过 Selenium(我认为您正在使用它?)所以我将按照您对 cell.text 格式的描述进行说明。
【解决方案2】:

在不为您编写代码的情况下,您需要:

  • 以与您获得的 Periods 列表相同的顺序遍历 cell.text
  • 用你得到的----填充字符串填充cell.textPeriod 5:...之间的空格,这样它的长度总是相同的
  • 在每次迭代 cell.text 时,在递增 50 的位置绘制文本。
  • 保存图片。

【讨论】:

    猜你喜欢
    • 2012-04-20
    • 2015-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-02
    • 2016-05-28
    • 2019-01-25
    • 2021-11-02
    相关资源
    最近更新 更多