Patch #1215184: fileinput now has a fileno() function for getting the

current file number.
This commit is contained in:
Georg Brandl 2006-02-19 13:56:17 +00:00
parent 602b9ba6b3
commit 67e9fb9d7a
4 changed files with 51 additions and 7 deletions

View File

@ -62,6 +62,12 @@ The following functions use the global state created by
line has been read, returns \code{None}.
\end{funcdesc}
\begin{funcdesc}{fileno}{}
Return the integer ``file descriptor'' for the current file. When no
file is opened (before the first line and between files), returns
\code{-1}.
\end{funcdesc}
\begin{funcdesc}{lineno}{}
Return the cumulative line number of the line that has just been
read. Before the first line has been read, returns \code{0}. After
@ -107,10 +113,11 @@ module is available for subclassing as well:
\begin{classdesc}{FileInput}{\optional{files\optional{,
inplace\optional{, backup}}}}
Class \class{FileInput} is the implementation; its methods
\method{filename()}, \method{lineno()}, \method{fileline()},
\method{isfirstline()}, \method{isstdin()}, \method{nextfile()} and
\method{close()} correspond to the functions of the same name in the
module. In addition it has a \method{readline()} method which
\method{filename()}, \method{fileno()}, \method{lineno()},
\method{fileline()}, \method{isfirstline()}, \method{isstdin()},
\method{nextfile()} and \method{close()} correspond to the functions
of the same name in the module.
In addition it has a \method{readline()} method which
returns the next input line, and a \method{__getitem__()} method
which implements the sequence behavior. The sequence must be
accessed in strictly sequential order; random access and

View File

@ -73,7 +73,6 @@ XXX Possible additions:
- optional getopt argument processing
- specify open mode ('r' or 'rb')
- fileno()
- isatty()
- read(), read(size), even readlines()
@ -153,6 +152,15 @@ def filelineno():
raise RuntimeError, "no active input()"
return _state.filelineno()
def fileno():
"""
Return the file number of the current file. When no file is currently
opened, returns -1.
"""
if not _state:
raise RuntimeError, "no active input()"
return _state.fileno()
def isfirstline():
"""
Returns true the line just read is the first line of its file,
@ -175,8 +183,9 @@ class FileInput:
"""class FileInput([files[, inplace[, backup]]])
Class FileInput is the implementation of the module; its methods
filename(), lineno(), fileline(), isfirstline(), isstdin(), nextfile()
and close() correspond to the functions of the same name in the module.
filename(), lineno(), fileline(), isfirstline(), isstdin(), fileno(),
nextfile() and close() correspond to the functions of the same name
in the module.
In addition it has a readline() method which returns the next
input line, and a __getitem__() method which implements the
sequence behavior. The sequence must be accessed in strictly
@ -334,6 +343,15 @@ class FileInput:
def filelineno(self):
return self._filelineno
def fileno(self):
if self._file:
try:
return self._file.fileno()
except ValueError:
return -1
else:
return -1
def isfirstline(self):
return self._filelineno == 1

View File

@ -167,3 +167,19 @@ try:
verify(lines == ["A\n", "B"])
finally:
remove_tempfiles(t1)
if verbose:
print "16. fileno()"
try:
t1 = writeTmp(1, ["A\nB"])
t2 = writeTmp(2, ["C\nD"])
fi = FileInput(files=(t1, t2))
verify(fi.fileno() == -1)
line = fi.next()
verify(fi.fileno() != -1)
fi.nextfile()
verify(fi.fileno() == -1)
line = list(fi)
verify(fi.fileno() == -1)
finally:
remove_tempfiles(t1, t2)

View File

@ -366,6 +366,9 @@ Extension Modules
Library
-------
- Patch #1215184: fileinput now has a fileno() function for getting the
current file number.
- Patch #1349274: gettext.install() now optionally installs additional
translation functions other than _() in the builtin namespace.