例如,我在一个文件中有2000行,并且我想一次读500行,并在读取另外500行之前对这500行进行操作。我想知道是否有人会为我学习一些快速代码。谢谢!Python 2.7:如何从文件一次只读几行?
回答
您可以使用生成器将这些行组合在一起,并以便于在简单for循环中使用的方式生成它们。这可能让你开始:
def chunks_of(iterable, chunk_size=500):
out = []
for item in iterable:
out.append(item)
if len(out) >= chunk_size:
yield out
out = []
if out:
yield out
然后,您可以使用此类似:
for chunk_of_lines in chunks_of(file('/path/to/file'), chunk_size=500):
# chunk_of_lines is 500 or fewer lines from the file
(为什么“500或更少”因为最后一个块可能不是500行,如果行中的数字?该文件不是500的倍数。)
编辑:总是先检查文档。下面是从the itertools docs
def grouper(n, iterable, fillvalue=None):
"grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"
args = [iter(iterable)] * n
return izip_longest(fillvalue=fillvalue, *args)
配方这就造成对迭代ñ迭代器列表(在这种情况下,文件对象) - 因为它们是相同的底层对象的所有迭代器,当一个人的进步,其余的都会提前 - 然后拉下结果。 izip_longest
的工作方式与izip
类似,但将其结果与fillvalue
一起填充,而不是像我的chunks_of
函数那样简单地省略它们。
我认为对于绝对是初学者的人来说,发电机解决方案太复杂了。如果他们不能写一个简单的循环,他们不会理解生成器和yield语句。 –
@eryksun d'oh!谢谢,好点 - 现在对我来说实际上更有意义。 – dcrosta
您也可以使用itertools.islice
同时读取500线:
lines = itertools.islice(file_obj, 500)
纠正我,但我认为这个很基本的示例将工作太:
linesToProceed = 500
with open(filename, 'r') as f:
lines = []
for i,line in enumerate(f):
if (i + 1) % linesToProceed:
# do something with lines in lines
lines = []
else:
lines.append(line)
- 1. 读几行从文件一次
- 2. 从文本文件中读取一次4行或几行
- 3. Python - 一次从文件读取1000行
- 4. 阅读文件只一次
- 5. 只读一次文件的下一行
- 6. PHP,如何从文件中只读取几行
- 7. Python 2.7 - 从文件中读取和读取一个列表
- 8. 如何从文本文件python 2.7
- 9. 只读文件的前几行
- 10. 从文本文件只读第一行
- 11. 如何从python文件中一次读取一个字符?
- 12. PYTHON从参考文件几次打印
- 13. python - 从文件中读取几列
- 14. 一次只读一行
- 15. 一次从文件中读取两行
- 16. 如何从文本文件中读取同一行两次?
- 17. 只运行一次js文件一次
- 18. 如何在Python 2.7中一次解码unicode一行?
- 19. 如何阅读python中的skippinf几行之后的json文件?
- 20. os.chmod()是Python 2.7只适用于文件?
- 21. 从python的文件中读取一行
- 22. 麻烦从另一个python(2.7)文件打开Qt4 python文件
- 23. Python 2.7版文件读取错误
- 24. 如何使用OleDbDataAdapter从Excel文件中只读取第一行?
- 25. 如何从文件中只读取一行
- 26. 如何只从文件读取一行(它的头)?
- 27. 如何用python 2.7创建文件txt文件csv 2.7
- 28. 如何只读取CSV文件每一行的第一列
- 29. 一次读取文本文件一行
- 30. 一次只读一个“行”的制表符分隔文件
向我们展示你的代码现在,我们将从那里开始。 –