[Python-checkins] r54772 - in python/trunk: Doc/lib/libstdtypes.tex Doc/lib/libstring.tex Lib/string.py Lib/test/string_tests.py Misc/NEWS Objects/stringobject.c (original) (raw)
raymond.hettinger python-checkins at python.org
Thu Apr 12 06:10:04 CEST 2007
- Previous message: [Python-checkins] r54771 - sandbox/trunk/2to3/fixes/fix_repr.py
- Next message: [Python-checkins] r54773 - sandbox/trunk/pep0/TODO sandbox/trunk/pep0/pep0.py sandbox/trunk/pep0/test_pep0.py
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Author: raymond.hettinger Date: Thu Apr 12 06:10:00 2007 New Revision: 54772
Modified: python/trunk/Doc/lib/libstdtypes.tex python/trunk/Doc/lib/libstring.tex python/trunk/Lib/string.py python/trunk/Lib/test/string_tests.py python/trunk/Misc/NEWS python/trunk/Objects/stringobject.c Log: SF 1193128: Let str.translate(None) be an identity transformation
Modified: python/trunk/Doc/lib/libstdtypes.tex
--- python/trunk/Doc/lib/libstdtypes.tex (original) +++ python/trunk/Doc/lib/libstdtypes.tex Thu Apr 12 06:10:00 2007 @@ -878,6 +878,13 @@
You can use the \function{maketrans()} helper function in the \refmodule{string} module to create a translation table. +For string objects, set the \var{table} argument to \code{None} +for translations that only delete characters: +\begin{verbatim}
'read this short text'.translate(None, 'aeiou')
- 'rd ths shrt txt'
+\end{verbatim} +\versionadded[Support for a \code{None} \var{table} argument]{2.6}
For Unicode objects, the \method{translate()} method does not accept the optional \var{deletechars} argument. Instead, it
Modified: python/trunk/Doc/lib/libstring.tex
--- python/trunk/Doc/lib/libstring.tex (original) +++ python/trunk/Doc/lib/libstring.tex Thu Apr 12 06:10:00 2007 @@ -419,7 +419,8 @@ Delete all characters from \var{s} that are in \var{deletechars} (if present), and then translate the characters using \var{table}, which must be a 256-character string giving the translation for each
- character value, indexed by its ordinal.
- character value, indexed by its ordinal. If \var{table} is \code{None},
- then only the character deletion step is performed. \end{funcdesc}
\begin{funcdesc}{upper}{s}
Modified: python/trunk/Lib/string.py
--- python/trunk/Lib/string.py (original) +++ python/trunk/Lib/string.py Thu Apr 12 06:10:00 2007 @@ -487,7 +487,7 @@ deletions argument is not allowed for Unicode strings.
"""
- if deletions:
- if deletions or table is None: return s.translate(table, deletions) else: # Add s[:0] so that if s is Unicode and table is an 8-bit string,
Modified: python/trunk/Lib/test/string_tests.py
--- python/trunk/Lib/test/string_tests.py (original) +++ python/trunk/Lib/test/string_tests.py Thu Apr 12 06:10:00 2007 @@ -1096,6 +1096,9 @@ self.checkequal('Abc', 'abc', 'translate', table) self.checkequal('xyz', 'xyz', 'translate', table) self.checkequal('yz', 'xyz', 'translate', table, 'x')
self.checkequal('yx', 'zyzzx', 'translate', None, 'z')
self.checkequal('zyzzx', 'zyzzx', 'translate', None, '')
self.checkequal('zyzzx', 'zyzzx', 'translate', None) self.checkraises(ValueError, 'xyz', 'translate', 'too short', 'strip') self.checkraises(ValueError, 'xyz', 'translate', 'too short')
Modified: python/trunk/Misc/NEWS
--- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Thu Apr 12 06:10:00 2007 @@ -14,6 +14,10 @@
- Request #1191699: Slices can now be pickled.
+- Request #1193128: str.translate() now allows a None argument for
- translations that only remove characters without re-mapping the
- remaining characters.
- Patch #1682205: a TypeError while unpacking an iterable is no longer masked by a generic one with the message "unpack non-sequence".
Modified: python/trunk/Objects/stringobject.c
--- python/trunk/Objects/stringobject.c (original) +++ python/trunk/Objects/stringobject.c Thu Apr 12 06:10:00 2007 @@ -2344,10 +2344,10 @@ string_translate(PyStringObject *self, PyObject *args) { register char *input, *output; - register const char *table; + const char *table; register Py_ssize_t i, c, changed = 0; PyObject input_obj = (PyObject)self; - const char *table1, *output_start, *del_table=NULL; + const char *output_start, *del_table=NULL; Py_ssize_t inlen, tablen, dellen = 0; PyObject *result; int trans_table[256]; @@ -2358,9 +2358,13 @@ return NULL;
if (PyString_Check(tableobj)) {
table1 = PyString_AS_STRING(tableobj);
table = PyString_AS_STRING(tableobj); tablen = PyString_GET_SIZE(tableobj); }
- else if (tableobj == Py_None) {
table = NULL;
tablen = 256;
- } #ifdef Py_USING_UNICODE else if (PyUnicode_Check(tableobj)) { /* Unicode .translate() does not support the deletechars
@@ -2374,7 +2378,7 @@ return PyUnicode_Translate((PyObject *)self, tableobj, NULL); } #endif - else if (PyObject_AsCharBuffer(tableobj, &table1, &tablen)) + else if (PyObject_AsCharBuffer(tableobj, &table, &tablen)) return NULL;
if (tablen != 256) {
@@ -2403,7 +2407,6 @@ dellen = 0; }
- table = table1; inlen = PyString_GET_SIZE(input_obj); result = PyString_FromStringAndSize((char *)NULL, inlen); if (result == NULL)
@@ -2411,7 +2414,7 @@ output_start = output = PyString_AsString(result); input = PyString_AS_STRING(input_obj);
- if (dellen == 0) {
- if (dellen == 0 && table != NULL) { /* If no deletions are required, use faster code */ for (i = inlen; --i >= 0; ) { c = Py_CHARMASK(*input++);
@@ -2425,8 +2428,13 @@ return input_obj; }
- for (i = 0; i < 256; i++)
trans_table[i] = Py_CHARMASK(table[i]);
if (table == NULL) {
for (i = 0; i < 256; i++)
trans_table[i] = Py_CHARMASK(i);
} else {
for (i = 0; i < 256; i++)
trans_table[i] = Py_CHARMASK(table[i]);
}
for (i = 0; i < dellen; i++) trans_table[(int) Py_CHARMASK(del_table[i])] = -1;
- Previous message: [Python-checkins] r54771 - sandbox/trunk/2to3/fixes/fix_repr.py
- Next message: [Python-checkins] r54773 - sandbox/trunk/pep0/TODO sandbox/trunk/pep0/pep0.py sandbox/trunk/pep0/test_pep0.py
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]