Python中带有for循环的ValueError
我需要创建一个函数,根据数字列表返回文件中的某些行,但我不断得到Python中带有for循环的ValueError,python,file-read,Python,File Read,我需要创建一个函数,根据数字列表返回文件中的某些行,但我不断得到ValueError:混合迭代和读取方法会丢失数据。有什么建议吗 with open(path) as f: for line in f: if i in lst: a = f.readline() ans += [a.strip()] i += 1 else: f.readline()
ValueError:混合迭代和读取方法会丢失数据。
有什么建议吗
with open(path) as f:
for line in f:
if i in lst:
a = f.readline()
ans += [a.strip()]
i += 1
else:
f.readline()
i += 1
您正在混合使用f中的
行和f.readline()
,这意味着您将阅读的行数超过您可能想要的行数。要避免这种情况,请尝试将代码更改为以下内容:
with open(path) as f:
while True:
if i in lst:
a = f.readline()
if not a:
break
ans += [a.strip()]
i += 1
else:
a = f.readline()
if not a:
break
i += 1
这样,只有您的readline
调用才会从文件中读取数据。您正在混合for line in f
和f.readline()。要避免这种情况,请尝试将代码更改为以下内容:
with open(path) as f:
while True:
if i in lst:
a = f.readline()
if not a:
break
ans += [a.strip()]
i += 1
else:
a = f.readline()
if not a:
break
i += 1
这样,只有readline
调用才会从文件中读取数据。迭代f
中的行就足够了:
with open(path) as f:
for i, line in enumerate(f):
if i in lst:
# do something
ans += [line.strip()]
这假设定义了路径
,lst
和ans
。由于您正在迭代文件中的行,因此不需要f.readlines()
,也不需要递增器。只需使用枚举
注意,串行列表连接(即最后一行)效率低下。根据你想做什么,看看哪个更快,传统上更像蟒蛇。考虑@ Burhan Khalid的方法。 < P>在<代码> f < /代码>中重复行应该足够:
with open(path) as f:
for i, line in enumerate(f):
if i in lst:
# do something
ans += [line.strip()]
这假设定义了路径
,lst
和ans
。由于您正在迭代文件中的行,因此不需要f.readlines()
,也不需要递增器。只需使用枚举
注意,串行列表连接(即最后一行)效率低下。根据你想做什么,看看哪个更快,传统上更像蟒蛇。考虑一下Burhan Khalid的方法。 < P>你可以简单地用列表理解:
def filter_file(filename, line_numbers):
with open(filename) as f:
return [line.strip() for idx,line in enumerate(f) if idx in line_numbers]
result = filter_file('some_file.txt', [1,5,7])
如果您的行\u编号
没有0索引(1是第一行),则需要调整循环:
return [line.strip() for idx,line in enumerate(f) if idx+1 in line_numbers]
您可以简单地通过列表理解这一点:
def filter_file(filename, line_numbers):
with open(filename) as f:
return [line.strip() for idx,line in enumerate(f) if idx in line_numbers]
result = filter_file('some_file.txt', [1,5,7])
如果您的行\u编号
没有0索引(1是第一行),则需要调整循环:
return [line.strip() for idx,line in enumerate(f) if idx+1 in line_numbers]
第3行,什么是i
?从0i开始的变量有一个文本文件和一个数字列表。我只需要返回与这些数字对应的行。列表是否已排序?您可以对f:
中的行使用或.readline()
,而不是两者都使用。一行3,从0i开始的I
?变量有一个文本文件和一个数字列表。我只需要返回与这些数字对应的行。列表是否已排序?您可以对f:
中的行使用,也可以使用。readline()
,而不是两者都使用。