python - 这个怎么不破?
问题描述
我写了一些我必须提交给在线编程课程的代码。该代码旨在:
- 导入并打开文件
- 将数据附加到所述文件
- 从所述文件中读取以显示每个城市名称和以摄氏度为单位的月平均高温。
输出应该如下所示:
City of Beijing month ave: highest high is 30.9 Celsius
City of Cairo month ave: highest high is 34.7 Celsius
City of London month ave: highest high is 23.5 Celsius
City of Nairobi month ave: highest high is 26.3 Celsius
City of New York City month ave: highest high is 28.9 Celsius
City of Sydney month ave: highest high is 26.5 Celsius
City of Tokyo month ave: highest high is 30.8 Celsius
City of Rio De Janeiro month ave: highest high is 30.0 Celsius
当代码运行时,它进入一个无限循环,我不明白为什么。我认为当文件指针到达文件末尾时,代码会中断,因为读取将等于“”(空字符串),这是 Falsey,所以它会停止。
我知道最好在没有关键字“while”的情况下编写代码,但在我的课程中,该关键字必须在代码中。我让代码与 for/in 关键字完美配合。
任何帮助是极大的赞赏。
编码:
!curl https://raw.githubusercontent.com/MicrosoftLearning/intropython/master/world_temp_mean.csv -o mean_temp.txt
mean_temp_file = open("mean_temp.txt","a+")
mean_temp_file.write("Rio de Janeiro,Brazil,30.0,18.0\n")
mean_temp_file.seek(0)
headings = mean_temp_file.readline()
headings_list = headings.split(",")
city_temp = mean_temp_file.readlines()
while city_temp:
for each_line in city_temp:
each_line_list = each_line.split(",")
print(headings_list[0].title(),"of",each_line_list[0].title(),headings_list[2],"is",each_line_list[2],"Celsius.")
mean_temp_file.close()
如果有帮助,我会在 Microsoft Azure Notebooks 中编写代码。
解决方案
您已创建city_temp
文件中所有行(但第一行)的列表:
city_temp = mean_temp_file.readlines()
您永远不会在循环内的任何地方修改该列表。因此,如果它第一次是非空的(因此是真实的),它将一次又一次地永远是非空的。
目前尚不清楚您实际上想对该循环做什么。您已经有一个遍历文件中每一行的内部循环:
for each_line in city_temp:
…这似乎是您需要的唯一循环。所以,只需摆脱外while
循环。:
city_temp = mean_temp_file.readlines()
for each_line in city_temp:
each_line_list = each_line.split(",")
print(headings_list[0].title(),"of",each_line_list[0].title(),headings_list[2],"is",each_line_list[2],"Celsius.")
当我们在它的时候,你不需要readlines()
在这里。这会将所有剩余的行读入一个列表,以便您可以循环遍历它——但文件本身是相同行的迭代器,因此您也可以循环遍历它,而不会浪费时间、内存和一行列出清单的代码:
for each_line in mean_temp_file:
each_line_list = each_line.split(",")
print(headings_list[0].title(),"of",each_line_list[0].title(),headings_list[2],"is",each_line_list[2],"Celsius.")
最后,使用该csv
模块可能会更容易:
import csv
mean_temp_file = open("mean_temp.txt","a+")
mean_temp_file.write("Rio de Janeiro,Brazil,30.0,18.0\n")
mean_temp_file.seek(0)
for row in csv.DictReader(mean_temp_file):
# here row is a dict, where the keys are the header names,
# and the values are this row's values
推荐阅读
- javascript - 如何找到总和等于函数出现次数的数字?
- vbscript - 从 vbs 编写 Word
- python - Discord bot python Channel未定义
- python - Keras 奇怪的崩溃
- php - Eventbrite PHP 回复
- python - 如何随机替换嵌套列表中的特定元素?
- android - 在运行时替换 inflateMenu
- sql - HAVING 和 GROUP BY
- javascript - 如何从 JavaScript 中的承诺链中的函数访问“this”?
- javascript - 在运行时平滑切换 HTML5 video 标签的视频文件