On 22Mar2019 17:45, Matthew Herzog <matthew.her...@gmail.com> wrote:
I have a Python3 script that reads the first eight characters of every
filename in a directory in order to determine whether the file was created
before or after 180 days ago based on each file's name. The file names all
begin with YYYYMMDD or erased_YYYYMMDD_etc.xls. I can collect all these
filenames already.
I need to tell my script to ignore any filename that does not conform to
the standard eight leading numerical characters, example: 20180922 or
erased_20171207_1oIkZf.so.
Here is my code.

if name.startswith('scrubbed_'):
           fileDate = datetime.strptime(name[9:17], DATEFMT).date()
       else:
           fileDate = datetime.strptime(name[0:8], DATEFMT).date()

I need logic to prevent the script from 'choking' on files that don't fit
these patterns. The script needs to carry on with its work and forget about
non-conformant filenames. Do I need to add code that causes an exception or
just add an elif block?

Just an elif. Untested example:

 for name in all_the_filenames:
   if name.startswith('erased_') and has 8 digits after that:
       extract date after "erased" ...
   elif name starts with 8 digits:
       extract date at the start
   else:
     print("skipping", repr(name))
     continue
   ... other stuff using the extracted date ...

The "continue" causes execution to go straight to the next loop iteration, effectively skipping the rest of the loop body. An exception won't really do what you want (well, not neatly).

Alan's suggestion of a regexp may be a sensible way to test filenames for conformance to your rules. \d{8} matches 8 digits. It doesn't do any tighter validation such as sane year, month or day values: 99999999 would be accepted. Which may be ok, and it should certainly be ok for your first attempt: tighten things up later.

Cheers,
Cameron Simpson <c...@cskk.id.au>
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor

Reply via email to