combining the path and fileinput modules
wo_shi_big_stomach
wo_shi_big_stomach at mac.com
Thu Nov 23 10:21:45 EST 2006
On 11/23/06 6:15 AM, Rob Wolfe wrote:
> wo_shi_big_stomach wrote:
>> Newbie to python writing a script to recurse a directory tree and delete
>> the first line of a file if it contains a given string. I get the same
>> error on a Mac running OS X 10.4.8 and FreeBSD 6.1.
>>
>> Here's the script:
>>
>> # start of program
>>
>> # p.pl - fix broken SMTP headers in email files
>> #
>> # recurses from dir and searches all subdirs
>> # for each file, evaluates whether 1st line starts with "From "
>> # for each match, program deletes line
>>
>> import fileinput
>> import os
>> import re
>> import string
>> import sys
>> from path import path
>>
>> # recurse dirs
>> dir = path(/home/wsbs/Maildir)
>> for f in dir.walkfiles('*'):
>> #
>> # test:
>> # print f
>
> Are you absolutely sure that f list doesn't contain
> any path to directory, not file?
> Add this:
>
> f = filter(os.path.isfile, f)
>
> and try one more time.
Sorry, no joy. Printing f then produces:
rppp
rppppp
rppppp
rpppr
rppppp
rpppP
rppppp
rppppp
which I assure you are not the filenames in this directory.
I've tried this with f and f.name. The former prints the full pathname
and filename; the latter prints just the filename. But neither works
with the fileinput.input() call below.
I get the same error with the filtered mod as before:
File "./p", line 23, in ?
for line in fileinput.input(f, inplace=1, backup='.bak'):
Thanks again for info on what to feed fileinput.input()
>
>> #
>> # open file, search, change if necessary, write backup
>> for line in fileinput.input(f, inplace=1, backup='.bak'):
>> # check first line only
>> if fileinput.isfirstline():
>> if not re.search('^From ',line):
>> print line.rstrip('\n')
>> # just print all other lines
>> if not fileinput.isfirstline():
>> print line.rstrip('\n')
>> fileinput.close()
>> # end of program
>
More information about the Python-list
mailing list