<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#ffffff" text="#000000">
    On 04/04/2011 11:20 AM, Charles R Harris wrote:
    <blockquote
      cite="mid:BANLkTimjT1kAjUSoWuFs84Pq6F9biTCZDQ@mail.gmail.com"
      type="cite"><br>
      <br>
      <div class="gmail_quote">On Mon, Apr 4, 2011 at 9:59 AM, Bruce
        Southey <span dir="ltr"><<a moz-do-not-send="true"
            href="mailto:bsouthey@gmail.com">bsouthey@gmail.com</a>></span>
        wrote:<br>
        <blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt
          0.8ex; border-left: 1px solid rgb(204, 204, 204);
          padding-left: 1ex;">
          <div class="im">On 03/31/2011 12:02 PM, Derek Homeier wrote:<br>
          </div>
          <div>
            <div class="h5">> On 31 Mar 2011, at 17:03, Bruce Southey
              wrote:<br>
              ><br>
              >> This is an invalid ticket because the docstring
              clearly states that in<br>
              >> 3 different, yet critical places, that missing
              values are not handled<br>
              >> here:<br>
              >><br>
              >> "Each row in the text file must have the same
              number of values."<br>
              >> "genfromtxt : Load data with missing values
              handled as specified."<br>
              >> "   This function aims to be a fast reader for
              simply formatted<br>
              >> files.  The<br>
              >>     `genfromtxt` function provides more
              sophisticated handling of,<br>
              >> e.g.,<br>
              >>     lines with missing values."<br>
              >><br>
              >> Really I am trying to separate the usage of
              loadtxt and genfromtxt to<br>
              >> avoid unnecessary duplication and confusion. Part
              of this is<br>
              >> historical because loadtxt was added in 2007 and
              genfromtxt was added<br>
              >> in 2009. So really certain features of loadtxt
              have been  'kept' for<br>
              >> backwards compatibility purposes yet these
              features can be 'abused' to<br>
              >> handle missing data. But I really consider that
              any missing values<br>
              >> should cause loadtxt to fail.<br>
              >><br>
              > OK, I was not aware of the design issues of loadtxt
              vs. genfromtxt -<br>
              > you could probably say also for historical reasons
              since I have not<br>
              > used genfromtxt much so far.<br>
              > Anyway the docstring statement "Converters can also
              be used to<br>
              >           provide a default value for missing data:"<br>
              > then appears quite misleading, or an invitation to
              abuse, if you will.<br>
              > This should better be removed from the documentation
              then, or users<br>
              > explicitly discouraged from using converters instead
              of genfromtxt<br>
              > (I don't see how you could completely prevent using
              converters in<br>
              > this way).<br>
              ><br>
              >> The patch is incorrect because it should not
              include a space in the<br>
              >> split() as indicated in the comment by the
              original reporter. Of<br>
              > The split('\r\n') alone caused
              test_dtype_with_object(self) to fail,<br>
              > probably<br>
              > because it relies on stripping the blanks. But maybe
              the test is ill-<br>
              > formed?<br>
              ><br>
              >> course a corrected patch alone still is not
              sufficient to address the<br>
              >> problem without the user providing the correct
              converter. Also you<br>
              >> start to run into problems with multiple
              delimiters (such as one space<br>
              >> versus two spaces) so you start down the path to
              add all the features<br>
              >> that duplicate genfromtxt.<br>
              > Given that genfromtxt provides that functionality
              more conveniently,<br>
              > I agree again users should be encouraged to use this
              instead of<br>
              > converters.<br>
              > But the actual tab-problem causes in fact an issue
              not related to<br>
              > missing<br>
              > values at all (well, depending on what you call a
              missing value).<br>
              > I am describing an example on the ticket.<br>
              ><br>
              > Cheers,<br>
              >                                       Derek<br>
              ><br>
              > _______________________________________________<br>
              > NumPy-Discussion mailing list<br>
              > <a moz-do-not-send="true"
                href="mailto:NumPy-Discussion@scipy.org">NumPy-Discussion@scipy.org</a><br>
              > <a moz-do-not-send="true"
                href="http://mail.scipy.org/mailman/listinfo/numpy-discussion"
                target="_blank">http://mail.scipy.org/mailman/listinfo/numpy-discussion</a><br>
            </div>
          </div>
          Okay I see that 1071 got closed which I am fine with.<br>
          <br>
          I think that your following example should be a test because
          the two<br>
          spaces should not be removed with a tab delimiter:<br>
          np.loadtxt(StringIO("aa\tbb\n \t \ncc\t"), delimiter='\t',<br>
          dtype=np.dtype([('label', 'S4'), ('comment', 'S4')]))<br>
          <br>
        </blockquote>
        <div><br>
          Make a test and we'll put it in.<br>
          <br>
          Chuck <br>
        </div>
        <br>
      </div>
      <br>
    </blockquote>
    I know!<br>
    Trying to write one made me realize that loadtxt is not handling
    string arrays correctly. So I have to check more on this as I think
    loadtxt is giving a 1-d array instead of a 2-d array.<br>
    <br>
    I do agree with you Pierre but this is a nice corner case that Derek
    raised where a space does not necessarily mean a missing value when
    there is a tab delimiter:<br>
    <br>
    data = StringIO("aa\tbb\n \t \ncc\tdd")<br>
    dt=np.dtype([('label', 'S2'), ('comment', 'S2')])<br>
    test = np.loadtxt(data, delimiter="\t", dtype=dt)<br>
    control = np.array([['aa','bb'], [' ', ' '],['cc','dd']], dtype=dt)<br>
    <br>
    So 'test' and 'control' should give the same array.<br>
    <br>
    Bruce<br>
  </body>
</html>