lists and files question

Discussion in 'Python' started by hokiegal99, Jul 23, 2003.

  1. hokiegal99

    hokiegal99 Guest

    This code:

    import os, re, string
    setpath = raw_input("Enter the path: ")
    for root, dirs, files in os.walk(setpath):
    id = re.compile('Microsoft Excel Worksheet')
    fname = files
    # print fname
    content = open(fname[1],'rb')

    Produces this error:

    IOError: Error[2] No such file or directory 'Name of File'

    The strange thing is that it correctly identifies the file that it says
    doesn't exist. Could someone explain why this is?

    Also, is "files" a nested list? It looks like one, but I'm not entirely
    sure as I'm still relatively new to Python. Thanks!
     
    hokiegal99, Jul 23, 2003
    #1
    1. Advertising

  2. hokiegal99

    Mark Day Guest

    In article <>, hokiegal99
    <> wrote:

    > This code:
    >
    > import os, re, string
    > setpath = raw_input("Enter the path: ")
    > for root, dirs, files in os.walk(setpath):
    > id = re.compile('Microsoft Excel Worksheet')
    > fname = files
    > # print fname
    > content = open(fname[1],'rb')
    >
    > Produces this error:
    >
    > IOError: Error[2] No such file or directory 'Name of File'
    >
    > The strange thing is that it correctly identifies the file that it says
    > doesn't exist. Could someone explain why this is?


    The problem is that file doesn't exist in the current working
    directory; it's in another directory (stored in "root" in your code).

    Try this:
    content = open(os.path.join(root,fname[1]), 'rb')

    > Also, is "files" a nested list? It looks like one, but I'm not entirely
    > sure as I'm still relatively new to Python. Thanks!


    It is a list of strings. Each string is the name of one of the files
    in the directory (whose path is in "root" above).

    -Mark
     
    Mark Day, Jul 23, 2003
    #2
    1. Advertising

  3. On Tuesday 22 July 2003 16:57, hokiegal99 wrote:
    > This code:
    >
    > import os, re, string
    > setpath = raw_input("Enter the path: ")
    > for root, dirs, files in os.walk(setpath):
    > id = re.compile('Microsoft Excel Worksheet')
    > fname = files
    > # print fname
    > content = open(fname[1],'rb')
    >
    > Produces this error:
    >
    > IOError: Error[2] No such file or directory 'Name of File'
    >


    if you replace your logic with some prints you will quickly see the problem.

    What happens is os.walk() passes filenames without their path. You need to
    use os.path.join() to get the full name back.
     
    Sean 'Shaleh' Perry, Jul 23, 2003
    #3
  4. hokiegal99

    hokiegal99 Guest

    "print fname" prints out the list of files in "setpath" w/o problem. How
    does it do that if os.walk doesn't give it the path to the files?

    Here's some output from "print fname":

    ['index.txt', 'CELL-MINUTES.xls', '.nautilus-metafile.xml']
    ['2000 Schedule.xls', '2001 State.pdf', '2001.pdf', 'A Little More Like
    Bill.doc', 'AARP.doc', "Accounting's of Dad's Est.xls",
    'Amortization_Table.xls', 'huey letter.doc', 'utt-R&D.pdf', 'utt.pdf',
    'rest.xls', 'Debts and Assets.xls', 'First Accounting - Estate.xls',
    'Friends.doc', "Grace's.doc", 'Home Address.doc', 'Ins.doc',
    'Insurance.doc', 'Interro.doc', 'Marshall.doc', 'NBB home loan.doc',
    'Position Description.doc', "andy's", "Andy's Travel Voucher.xls",
    "Andy's Travel.xls", 'Rebuttal.doc', 'Refinance.doc', 'TaxReturn 2.pdf',
    'TaxReturn 3.pdf', 'TaxReturn 4.pdf', 'TaxReturn 5.pdf',
    'TaxReturn.pdf', 'The Casey Song.doc', "Touch of the Hand.xls", 'Workout
    Sheet.xls', 'application.pdf', 'budsum.pdf']

    When I add os.path.join like this:

    setpath = raw_input("Enter the path: ")
    for root, dirs, files in os.walk(setpath):
    id = re.compile('Microsoft Excel Worksheet')
    fname = files
    print fname
    content = open(os.path.join(root,fname[0]),'rb')

    I get a "IndexError: list index out of range" error.

    This is a Linux 2.4 computer running Python 2.3b2... if that matters.

    Thanks!

    Sean 'Shaleh' Perry wrote:
    > On Tuesday 22 July 2003 16:57, hokiegal99 wrote:
    >
    >>This code:
    >>
    >>import os, re, string
    >>setpath = raw_input("Enter the path: ")
    >>for root, dirs, files in os.walk(setpath):
    >> id = re.compile('Microsoft Excel Worksheet')
    >> fname = files
    >># print fname
    >> content = open(fname[1],'rb')
    >>
    >>Produces this error:
    >>
    >>IOError: Error[2] No such file or directory 'Name of File'
    >>

    >
    >
    > if you replace your logic with some prints you will quickly see the problem.
    >
    > What happens is os.walk() passes filenames without their path. You need to
    > use os.path.join() to get the full name back.
     
    hokiegal99, Jul 23, 2003
    #4
  5. hokiegal99

    hokieghal99 Guest

    Thanks to everyone for the feedback on this. I've learned a lot from you
    guys.

    John Hunter wrote:
    > Others have already answered your question - I just want to point out
    > a few of other things
    >
    > import os, re, string
    > setpath = raw_input("Enter the path: ")
    > for root, dirs, files in os.walk(setpath):
    > id = re.compile('Microsoft Excel Worksheet')
    >
    > 1) id is a built in function; you may not want to override it with
    > your variable name
    >
    > >>> x = 1
    > >>> id(x)

    > 135313208
    >
    > 2) The reason to use re.compile is for efficiency. There is no need
    > to call it inside the loop, since you're just recompiling the same
    > regex over and over again. Instead, compile the regex outside the
    > loop
    >
    > >>> rgx = re.compile('[A-Z]+')
    > >>> for some_text in some_list:

    > ... m = rgx.match(some_text)
    >
    > 3) If you want to match 'Microsoft Excel Worksheet', you don't need
    > regular expressions since this is a string literal. You will
    > probably be better off just using the string find method, as in
    >
    > s.find('Microsoft Excel Worksheet')
    >
    > 4) You may want to look at the path module, which provides a nice
    > interface for walking over files:
    > http://www.jorendorff.com/articles/python/path/
    >
    > >>> from path import path
    > >>> xldir = path(setpath)
    > >>> for f in xldir.files('*.xls'):

    > ... print f.read().find('Microsoft Excel Worksheet')
    >
    > Cheers,
    > John Hunter
    >
     
    hokieghal99, Jul 23, 2003
    #5
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. =?UTF-8?B?w4FuZ2VsIEd1dGnDqXJyZXogUm9kcsOtZ3Vleg==

    List of lists of lists of lists...

    =?UTF-8?B?w4FuZ2VsIEd1dGnDqXJyZXogUm9kcsOtZ3Vleg==, May 8, 2006, in forum: Python
    Replies:
    5
    Views:
    413
    =?UTF-8?B?w4FuZ2VsIEd1dGnDqXJyZXogUm9kcsOtZ3Vleg==
    May 15, 2006
  2. Daniel Nogradi
    Replies:
    3
    Views:
    351
    Dennis Lee Bieber
    Nov 10, 2006
  3. Gabriel Zachmann

    Bug with lists of pairs of lists and append()

    Gabriel Zachmann, Sep 28, 2007, in forum: Python
    Replies:
    2
    Views:
    236
    Gabriel Zachmann
    Oct 1, 2007
  4. Gabriel Zachmann

    Bug with lists of pairs of lists and append()

    Gabriel Zachmann, Sep 28, 2007, in forum: Python
    Replies:
    5
    Views:
    268
    Gabriel Zachmann
    Oct 1, 2007
  5. antar2
    Replies:
    2
    Views:
    396
    Bighead
    Jul 17, 2008
Loading...

Share This Page