文本在 Python 中以错误的顺序打印
Posted
技术标签:
【中文标题】文本在 Python 中以错误的顺序打印【英文标题】:Text is printed in the wrong order in Python 【发布时间】:2020-07-04 18:20:18 【问题描述】:我写了这个程序:
with open("Films.txt","r") as f:
films=[]
newFilms=[]
for row in f:
field=row.split(",")
ID=field[0]
title=field[1]
year=field[2]
rating=field[3]
duration=int(field[4])
genre=field[5].strip()
newFilms.append(ID)
newFilms.append(title)
newFilms.append(year)
newFilms.append(rating)
newFilms.append(duration)
print(newFilms)
newFilms.append(newFilms)
newFilms=[]
sortedbyLength = sorted(films,key=lambda x:x[4],reverse=True)
print("%-5s %-20s %-20s %-20s %-20s %-20s"%("ID","Title","Year","Rating","Length (mins)","Genre"))
for i in range(len(sortedbyLength)):
print("%-5s %-20s %-20s %-20s %-20s %-20s"%(sortedbyLength[i][0],sortedbyLength[i][1],sortedbyLength[i][2],sortedbyLength[i][3],sortedbyLength[i][4],sortedbyLength[i][5]))
输出是这样的:
['001', 'Ghostbusters', '2016', 'PG', 116]
['002', ' The Legend of Tarzan', '2016', 'PG', 109]
['003', 'Jason Bourne', '2016', 'PG', 123]
['004', 'The Nice Guys', '2016', 'R', 116]
['005', 'The Scret Life of Pets', '2016', 'G', 91]
['006', 'Star Treck Beyond', '2016', 'PG', 120]
ID Title Year Rating Length (mins) Genre
这些打印语句的顺序错误,而不是我预期的顺序。谁能指出我在这里出错的地方? 谢谢!
【问题讨论】:
提示:让pandas
为您完成工作。将文件读入 DataFrame。
您希望newFilms
在newFilms.append(newFilms) ; newFilms=[]
之后会是什么?另外,你的文件是 CSV,你应该使用csv
模块来阅读它。
您希望它们按什么顺序排列?你有没有可能在你不想打电话的地方打电话给reverse
?
不,它们的顺序正确。你的最后一个 for 循环永远不会运行,因为 sortedbyLength
是空的,因为 films
是空的。
我认为您的意思是 films.append(newFilms)
而不是 newFilms.append(newFilms)
【参考方案1】:
您的电影列表为空,输出中的电影来自print(newFilms)
。在循环结束时,您应该使用 films.append(newFilms)
而不是 newFilms.append(newFilms)
。
【讨论】:
非常感谢 - 现在运行良好!即使今天早上刚读完它也真的很有帮助!【参考方案2】:你的第一个错误是你应该写films.append(newFilms)
而不是newFilms.append(newFilms)
。否则,sortedbyLength
将为空。
此外,您提供的输出与文件内容存在差异。在您的代码中,您正在读取一个名为 Genre
的字段,但输出不包含此字段。所以,我建议你也检查一下。
【讨论】:
非常感谢!它现在工作得很好——我昨晚做这个的时候一定很累!以上是关于文本在 Python 中以错误的顺序打印的主要内容,如果未能解决你的问题,请参考以下文章
需要 Tkinter 帮助:尝试在按下按钮时将文本输入到条目中以在控制台中打印。我无法打印[重复]
在 python 中打印出文本文件会给出错误消息 -charmap_decode(input,errors,decoding_table) [重复]