On 08/05/2013 11:12 PM, Joshua Landau wrote:
On 6 August 2013 03:00, Devyn Collier Johnson <devyncjohn...@gmail.com <mailto:devyncjohn...@gmail.com>> wrote:

    I am wanting to sort a plain text file alphanumerically by the
    lines. I have tried this code, but I get an error. I assume this
    command does not accept newline characters.


HINT #1: Don't assume that without a reason. It's wrong.

    >>> file = open('/home/collier/pytest/sort.TXT', 'r').read()


HINT #2: Don't lie. "file" is not a file so you probably shouldn't call it one. It's the contents of a file object.

    >>> print(file)
    z
    c
    w
    r
    h
    s
    d


    >>> file.sort() #The first blank line above is from the file. I do
    not know where the second comes from.
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: 'str' object has no attribute 'sort'


HINT #3: *Read*. What does it say?

    AttributeError: 'str' object has no attribute 'sort'

Probably your problem, then, is that a 'str' object has no attribute 'sort'. That's what it says.

"file" is a "'str' object". You are accessing the 'sort' attribute which it doesn't have.

    I had the parameters (key=str.casefold, reverse=True), but I took
    those out to make sure the error was not with my parameters.


HINT #4: Don't just guess what the problem is. The answer is in the error.

    Specifically, I need something that will sort the lines. They may
    contain one word or one sentence with punctuation. I need to
    reverse the sorting ('z' before 'a'). The case does not matter
    ('a' = 'A').

    I have also tried this without success:

    >>> file.sort(key=str.casefold, reverse=True)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: 'str' object has no attribute 'sort'




So you want to sort your string by lines. Rather than trying to abuse a .sort attribute that patently doesn't exist, just use sorted OR convert to a list first.

sorted(open('/home/collier/pytest/sort.TXT'), key=str.casefold, reverse=True)

Because it's bad to open files without a with unless you know what you're doing, use a with:

    with open('/home/collier/pytest/sort.TXT') as file:
        sorted(file, key=str.casefold, reverse=True)

Thanks for the advice Joshua. I find these tips very useful. However, how would I close the files, or would they close after the "with" construct is complete?

Mahalo,

DCJ
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to