python的readlines返回行数问题

namco 发布于 2012/08/04 07:17
阅读 10K+
收藏 0
lines = fileHandle.readlines(100)
for line in lines:
    tempFile.write(line)
按道理应该输出100行内容才对,但是运行却输出不是100行,输出到文件中,发现每次写到临时文件大小相同,但不是行数相同。
按说readlines(100)不是应该读出100行,而不是相同大小才对么?
python版本是2.7.1
加载中
0
PYPlus
PYPlus

引用来自“namco”的答案

引用来自“晓谢”的答案

你看看是不是readlines不管参数多少都是读出了大约8KB的内容,内部缓冲区大小是8KB,不指定大小倒是可以全部读取出来,参数至少是8000多否则小于8000都会按照内部缓冲区大小读取大小是一样的 ,你试试lines=open('test.txt').readlines(10000)是不是len(lines)就发生变化了?所以那参数似乎不是指定行数具体是啥我刚才测试了下把我之前的猜测给否决了 ,并且readlines返回值是list
readlines(hint=-1):
Read and return a list of lines from the stream. hint can be specified to control the number of lines read: no more lines will be read if the total size (in bytes/characters) of all lines so far exceeds hint.

怎么看文档感觉参数应该是读取行数呀。

我原先也以为是读取行,你的文档怎么跟我看得不一样啊,官方文档这样写的 If the optional sizehint argument is present, instead of reading up to EOF, whole lines totalling approximately sizehint bytes (possibly after rounding up to an internal buffer size) are read.

确实是指定大小啊并且会受内部缓冲区大小影响向上取整到内部缓冲区大小。内部缓冲区大约是8k也难怪我每次测试文件大小都是8k(8192)倍数,http://docs.python.org/library/stdtypes.html?highlight=readlines#file.readlines    ,

#!/usr/bin/env python

f=open('a.txt').readlines(1)
open('b.txt','w').writelines(f)
open('c.txt','w').writelines(open('a.txt').readlines(200))
open('d.txt','w').writelines(open('a.txt').readlines(9200))
open('e.txt','w').writelines(open('a.txt').readlines(26000))
open('f.txt','w').writelines(open('a.txt').readlines(40000))

[root@www  Desktop]$ du -b c.txt  b.txt  d.txt  e.txt f.txt 
8192	c.txt
8192	b.txt
16384	d.txt
32768	e.txt
40960	f.txt

都是8k 8192的倍数

n
namco
谢谢啦,初学python,文档看的是io.IOBase.readlines,乌龙啦.:)
1
lanybass
lanybass
反正8k也不大,你就全都读出来然后放到list里面再切片 lines = lines[:100]
0
PYPlus
PYPlus
你看看是不是readlines不管参数多少都是读出了大约8KB的内容,内部缓冲区大小是8KB,不指定大小倒是可以全部读取出来,参数至少是8000多否则小于8000都会按照内部缓冲区大小读取大小是一样的 ,你试试lines=open('test.txt').readlines(10000)是不是len(lines)就发生变化了?所以那参数似乎不是指定行数具体是啥我刚才测试了下把我之前的猜测给否决了 ,并且readlines返回值是list
PYPlus
PYPlus
确实如楼下所讲,但是有个8k限制,小于8k读出的是一样大小
0
Jooooooker
Jooooooker
readlines的参数是 size的限制 就是说读出来的东西的大小不能超过那个值
0
n
namco

引用来自“晓谢”的答案

你看看是不是readlines不管参数多少都是读出了大约8KB的内容,内部缓冲区大小是8KB,不指定大小倒是可以全部读取出来,参数至少是8000多否则小于8000都会按照内部缓冲区大小读取大小是一样的 ,你试试lines=open('test.txt').readlines(10000)是不是len(lines)就发生变化了?所以那参数似乎不是指定行数具体是啥我刚才测试了下把我之前的猜测给否决了 ,并且readlines返回值是list
readlines(hint=-1):
Read and return a list of lines from the stream. hint can be specified to control the number of lines read: no more lines will be read if the total size (in bytes/characters) of all lines so far exceeds hint.

怎么看文档感觉参数应该是读取行数呀。
返回顶部
顶部