Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   Python (http://www.velocityreviews.com/forums/f43-python.html)
-   -   About open file for Read (http://www.velocityreviews.com/forums/t955317-about-open-file-for-read.html)

moonhkt 12-10-2012 04:36 PM

About open file for Read
 
Hi All

I am new in Python. When using open and then for line in f .

Does it read all the data into f object ? or read line by line ?


f=open(file, 'r')
for line in f:
if userstring in line:
print "file: " + os.path.join(root,file)
break
f.close()


moonhk

Dave Angel 12-10-2012 05:14 PM

Re: About open file for Read
 
On 12/10/2012 11:36 AM, moonhkt wrote:
> Hi All
>
> I am new in Python. When using open and then for line in f .
>
> Does it read all the data into f object ? or read line by line ?
>
>
> f=open(file, 'r')
> for line in f:
> if userstring in line:
> print "file: " + os.path.join(root,file)
> break
> f.close()
>
>
> moonhk


open() does not read the whole file into any object. There is buffering
that goes on in the C libraries that open() calls, but that should be
transparent to you for regular files.

When you ask for a line, it'll read enough to fulfill that request, and
maybe some extra that'll get held somewhere in the C runtime library.

You should look into the 'with' statement, to avoid that f.close().
That way the file will be closed, regardless of whether you get an
exception or not.

http://docs.python.org/2/reference/c....html#index-15

with open(file,. "r") as f:
for line in f:
etc.

BTW, since you're in version 2.x, you should avoid hiding the builtin
file object. Call it something like file_name, or infile_name.

--

DaveA


Peter Otten 12-10-2012 05:40 PM

Re: About open file for Read
 
Dave Angel wrote:

> On 12/10/2012 11:36 AM, moonhkt wrote:
>> Hi All
>>
>> I am new in Python. When using open and then for line in f .
>>
>> Does it read all the data into f object ? or read line by line ?
>>
>>
>> f=open(file, 'r')
>> for line in f:
>> if userstring in line:
>> print "file: " + os.path.join(root,file)
>> break
>> f.close()
>>
>>
>> moonhk

>
> open() does not read the whole file into any object. There is buffering
> that goes on in the C libraries that open() calls, but that should be
> transparent to you for regular files.
>
> When you ask for a line, it'll read enough to fulfill that request, and
> maybe some extra that'll get held somewhere in the C runtime library.
>
> You should look into the 'with' statement, to avoid that f.close().
> That way the file will be closed, regardless of whether you get an
> exception or not.
>
> http://docs.python.org/2/reference/c....html#index-15
>
> with open(file,. "r") as f:
> for line in f:
> etc.
>
> BTW, since you're in version 2.x, you should avoid hiding the builtin
> file object. Call it something like file_name, or infile_name.
>


Python does a bit of buffering on its own (which is why you cannot mix file
iteration and .readline() calls):

>>> with open("tmp.txt", "w") as f: f.writelines("%s\n" % i for i in

range(10**6))
....
>>> f = open("tmp.txt")
>>> f.readline()

'0\n'
>>> f.tell()

2
>>> f.readline()

'1\n'
>>> f.tell()

4
>>> next(f) # a for-loop does this implicitly

'2\n'
>>> f.tell()

8196 # after a next() call or the first loop iteration
# part of the file is now in a buffer.
>>> f.readline()

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: Mixing iteration and read methods would lose data
>>> f.seek(0, 2)
>>> f.tell()

6888890


This is Python 2, in Python 3 f.tell() would fail after a next(f) call, but
f.readline() continues to work.



Steven D'Aprano 12-10-2012 08:45 PM

Re: About open file for Read
 
On Mon, 10 Dec 2012 08:36:22 -0800, moonhkt wrote:

> Hi All
>
> I am new in Python. When using open and then for line in f .
>
> Does it read all the data into f object ? or read line by line ?


Have you read the Fine Manual?

http://docs.python.org/2/library/std...l#file-objects

If you have read it, and the answer is still not clear, then please tell
us so we can improve the documentation.

`for line in open(file, "r"):` does not read the entire file into memory
at once, it iterates over the file reading one line at a time.


--
Steven


All times are GMT. The time now is 10:37 AM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.