python - Python .txt 文件迭代和 readlines()
问题描述
我有点坚持逐行读取文件,将其分配给变量并将其余代码应用于该变量。我的代码正在做它需要做的事情,我只是坚持迭代文件。我在尝试时收到“混合迭代和读取方法会丢失数据”错误:
for line in file:
user_input = file.readlines()
这样做我只能读取最后一行:
for line in user:
user_input = line
那么我要如何读取文件中的每一行呢?我觉得这将是一个重复的问题,但我只是不知道该怎么做。
解决方案
如果要逐行迭代,请执行以下操作:
for line in file:
do_something_with(line)
您的第二个版本不起作用,因为您所做的只是user_input
一遍又一遍地将局部变量重新分配给每一行,所以最后,您只有最后一个。
你实际上需要对这条线做一些事情,就在循环中。这是否意味着处理它并编写一些输出,或者将其添加到列表、字典或其他集合中以供以后使用,取决于您要执行的操作。
例如,如果您正在构建文件中所有单词的集合,您可以这样做:
words = set()
for line in file:
words |= set(line.split())
另一方面,如果您想一次读取整个文件以获取所有行的列表,请执行以下操作:
lines = file.readline()
… 或这个:
lines = list(file)
如果您需要多次循环这些行,或者以任意顺序访问它们,这可能非常有用。
如果没有,无论你想做什么lines
,你都可以直接使用file
,所以你在浪费时间和内存来构建这个列表。
您的代码将两者混合在一起:
for line in file:
user_input = file.readline()
换句话说,对于文件中的每一行,您都在尝试读取整个文件。这没有任何意义。要么对每一行做一些事情,要么只读取整个文件一次。
推荐阅读
- loopbackjs - 如何过滤一对多模型关系以便只返回活动记录?
- c++ - 指向不同派生类的指针数组
- dart - 等待第一个流事件作为未来?
- sql - SQL Server:创建唯一键但其中一列可能有多个值
- android - 无法从 Activity 调用 BroadcastReceiver
- python - 如何在一行中分配变量中的for循环值
- elixir - 在 Elixir 中的列表上“滑动窗口”
- google-analytics - 可以使用相同的跟踪 ID 创建多个跟踪器吗?
- ios - Swift 4,错误,UITableViewController perfrom segue,线程 1:信号 SIGABRT
- sql - SQL - 左连接