Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > ftp - delete multiple files of same type

Reply
Thread Tools

ftp - delete multiple files of same type

 
 
chris.annin@gmail.com
Guest
Posts: n/a
 
      02-05-2013
im trying to delete all text files from an ftp directory. is there a way todelete multiple files of the same extension?

I came up with the following code below which works but I have to append the string because ftp.nlst returns:

"-rwx------ 1 user group 0 Feb 04 15:57 New Text Document.txt"

but then when I try to delete it that long file name which includes the date doesnt exist - the files name is "new text document.txt" not "-rwx------ 1 user group 0 Feb 04 15:57 New Text Document.txt"

so anyway I stripped off the the beginning keeping the last 21 characters and it worked great - this should work being that I know all my text files names are the same length in characters - but it seems like there should be a better more bullet proof way to do this?

Code:
import os
import system
from ftplib import FTP

ftp = FTP('127.0.0.1')
ftp.login('')

directory = 'test'
ftp.cwd(directory)

files = ftp.nlst()

for file in files:
if file.find(".txt") != -1:
file = (file [-21:])
ftp.delete(file)

ftp.close()
any ideas on this? thank you.
 
Reply With Quote
 
 
 
 
Dave Angel
Guest
Posts: n/a
 
      02-05-2013
On 02/05/2013 12:29 PM, http://www.velocityreviews.com/forums/(E-Mail Removed) wrote:
> im trying to delete all text files from an ftp directory. is there a way to delete multiple files of the same extension?
>
> I came up with the following code below which works but I have to append the string because ftp.nlst returns:
>
> "-rwx------ 1 user group 0 Feb 04 15:57 New Text Document.txt"
>
> but then when I try to delete it that long file name which includes the date doesnt exist - the files name is "new text document.txt" not "-rwx------ 1 user group 0 Feb 04 15:57 New Text Document.txt"
>
> so anyway I stripped off the the beginning keeping the last 21 characters and it worked great - this should work being that I know all my text files names are the same length in characters - but it seems like there should be a better more bullet proof way to do this?
>
>
Code:
import os
> import system
> from ftplib import FTP
>
> ftp = FTP('127.0.0.1')
> ftp.login('')
>
> directory = 'test'
> ftp.cwd(directory)
>
> files = ftp.nlst()
>
> for file in files:
>      if file.find(".txt") != -1:
>          file = (file [-21:])
>          ftp.delete(file)
>
> ftp.close()
>
> any ideas on this? thank you.
>

You forgot to say what python version, and what OS you're running on.

I havne't played much with the ftp library, but it seems it'd be much
more robust to use something like file[39:] but that's still a "magic
number".

So i look in the ftplib docs:
http://docs.python.org/2/library/ftplib.html

and it seems there are other choices besides nlst(). If all you need is
the filename, why not check out

FTP.retrlines(command[, callback])
FTP.dir(argument[, ...])



--
DaveA
 
Reply With Quote
 
 
 
 
MRAB
Guest
Posts: n/a
 
      02-05-2013
On 2013-02-05 17:29, (E-Mail Removed) wrote:
> im trying to delete all text files from an ftp directory. is there a way to delete multiple files of the same extension?
>
> I came up with the following code below which works but I have to append the string because ftp.nlst returns:
>
> "-rwx------ 1 user group 0 Feb 04 15:57 New Text Document.txt"
>
> but then when I try to delete it that long file name which includes the date doesnt exist - the files name is "new text document.txt" not "-rwx------ 1 user group 0 Feb 04 15:57 New Text Document.txt"
>
> so anyway I stripped off the the beginning keeping the last 21 characters and it worked great - this should work being that I know all my text files names are the same length in characters - but it seems like there should be a better more bullet proof way to do this?
>
>
Code:
import os
> import system
> from ftplib import FTP
>
> ftp = FTP('127.0.0.1')
> ftp.login('')
>
> directory = 'test'
> ftp.cwd(directory)
>
> files = ftp.nlst()
>
> for file in files:
>      if file.find(".txt") != -1:
>          file = (file [-21:])
>          ftp.delete(file)
>
> ftp.close()
>
> any ideas on this? thank you.
>

Firstly, instead of:

file.find(".txt") != -1

use:

file.endswith(".txt")

It's clearer (and it's true only if the ".txt" is at the end!)

Secondly, your code assumes that the filename is exactly 21 characters.
It looks like the strings returned by ftp.nlst() consist of 9 fields
separated by whitespace, with the last field being the filename,
which can also contain spaces. That being so, you can split the strings
like this:

fields = file.split(None, 9)

That'll make a maximum of 9 splits on any whitespace, for example:

>>> "-rwx------ 1 user group 0 Feb 04 15:57 New Text

Document.txt".split(None, 9)
['-rwx------', '1', 'user', 'group', '0', 'Feb', '04', '15:57', 'New',
'Text Document.txt']

Therefore:

for entry in ftp.nlst():
if entry.endswith(".txt"):
filename = entry.split(None, 9)[-1]
ftp.delete(filename)

 
Reply With Quote
 
chris.annin@gmail.com
Guest
Posts: n/a
 
      02-05-2013

>
> > im trying to delete all text files from an ftp directory. is there a way to delete multiple files of the same extension?

>
> >

>
> > I came up with the following code below which works but I have to append the string because ftp.nlst returns:

>
> >

>
> > "-rwx------ 1 user group 0 Feb 04 15:57 New Text Document.txt"

>
> >

>
> > but then when I try to delete it that long file name which includes thedate doesnt exist - the files name is "new text document.txt" not "-rwx------ 1 user group 0 Feb 04 15:57 New Text Document.txt"

>
> >

>
> > so anyway I stripped off the the beginning keeping the last 21 characters and it worked great - this should work being that I know all my text files names are the same length in characters - but it seems like there shouldbe a better more bullet proof way to do this?

>
> >

>
> >
Code:
import os
Code:
> 
> > import system
> 
> > from ftplib import FTP
> 
> >
> 
> > ftp = FTP('127.0.0.1')
> 
> > ftp.login('')
> 
> >
> 
> > directory = 'test'
> 
> > ftp.cwd(directory)
> 
> >
> 
> > files = ftp.nlst()
> 
> >
> 
> > for file in files:
> 
> >      if file.find(".txt") != -1:
> 
> >          file = (file [-21:])
> 
> >          ftp.delete(file)
> 
> >
> 
> > ftp.close()

>
> >

>
> > any ideas on this? thank you.

>
> >

>
> Firstly, instead of:
>
>
>
> file.find(".txt") != -1
>
>
>
> use:
>
>
>
> file.endswith(".txt")
>
>
>
> It's clearer (and it's true only if the ".txt" is at the end!)
>
>
>
> Secondly, your code assumes that the filename is exactly 21 characters.
>
> It looks like the strings returned by ftp.nlst() consist of 9 fields
>
> separated by whitespace, with the last field being the filename,
>
> which can also contain spaces. That being so, you can split the strings
>
> like this:
>
>
>
> fields = file.split(None, 9)
>
>
>
> That'll make a maximum of 9 splits on any whitespace, for example:
>
>
>
> >>> "-rwx------ 1 user group 0 Feb 04 15:57 New Text

>
> Document.txt".split(None, 9)
>
> ['-rwx------', '1', 'user', 'group', '0', 'Feb', '04', '15:57', 'New',
>
> 'Text Document.txt']
>
>
>
> Therefore:
>
>
>
> for entry in ftp.nlst():
>
> if entry.endswith(".txt"):
>
> filename = entry.split(None, 9)[-1]
>
> ftp.delete(filename)


On Tuesday, February 5, 2013 10:45:02 AM UTC-8, MRAB wrote:
> On 2013-02-05 17:29, (E-Mail Removed) wrote:
>
> > im trying to delete all text files from an ftp directory. is there a way to delete multiple files of the same extension?

>
> >

>
> > I came up with the following code below which works but I have to append the string because ftp.nlst returns:

>
> >

>
> > "-rwx------ 1 user group 0 Feb 04 15:57 New Text Document.txt"

>
> >

>
> > but then when I try to delete it that long file name which includes thedate doesnt exist - the files name is "new text document.txt" not "-rwx------ 1 user group 0 Feb 04 15:57 New Text Document.txt"

>
> >

>
> > so anyway I stripped off the the beginning keeping the last 21 characters and it worked great - this should work being that I know all my text files names are the same length in characters - but it seems like there shouldbe a better more bullet proof way to do this?

>
> >

>
> >
Code:
import os
Code:
> 
> > import system
> 
> > from ftplib import FTP
> 
> >
> 
> > ftp = FTP('127.0.0.1')
> 
> > ftp.login('')
> 
> >
> 
> > directory = 'test'
> 
> > ftp.cwd(directory)
> 
> >
> 
> > files = ftp.nlst()
> 
> >
> 
> > for file in files:
> 
> >      if file.find(".txt") != -1:
> 
> >          file = (file [-21:])
> 
> >          ftp.delete(file)
> 
> >
> 
> > ftp.close()

>
> >

>
> > any ideas on this? thank you.

>
> >

>
> Firstly, instead of:
>
>
>
> file.find(".txt") != -1
>
>
>
> use:
>
>
>
> file.endswith(".txt")
>
>
>
> It's clearer (and it's true only if the ".txt" is at the end!)
>
>
>
> Secondly, your code assumes that the filename is exactly 21 characters.
>
> It looks like the strings returned by ftp.nlst() consist of 9 fields
>
> separated by whitespace, with the last field being the filename,
>
> which can also contain spaces. That being so, you can split the strings
>
> like this:
>
>
>
> fields = file.split(None, 9)
>
>
>
> That'll make a maximum of 9 splits on any whitespace, for example:
>
>
>
> >>> "-rwx------ 1 user group 0 Feb 04 15:57 New Text

>
> Document.txt".split(None, 9)
>
> ['-rwx------', '1', 'user', 'group', '0', 'Feb', '04', '15:57', 'New',
>
> 'Text Document.txt']
>
>
>
> Therefore:
>
>
>
> for entry in ftp.nlst():
>
> if entry.endswith(".txt"):
>
> filename = entry.split(None, 9)[-1]
>
> ftp.delete(filename)



wow, thank you very much thats a huge help.

Chris
 
Reply With Quote
 
chris.annin@gmail.com
Guest
Posts: n/a
 
      02-05-2013

>
> > im trying to delete all text files from an ftp directory. is there a way to delete multiple files of the same extension?

>
> >

>
> > I came up with the following code below which works but I have to append the string because ftp.nlst returns:

>
> >

>
> > "-rwx------ 1 user group 0 Feb 04 15:57 New Text Document.txt"

>
> >

>
> > but then when I try to delete it that long file name which includes thedate doesnt exist - the files name is "new text document.txt" not "-rwx------ 1 user group 0 Feb 04 15:57 New Text Document.txt"

>
> >

>
> > so anyway I stripped off the the beginning keeping the last 21 characters and it worked great - this should work being that I know all my text files names are the same length in characters - but it seems like there shouldbe a better more bullet proof way to do this?

>
> >

>
> >
Code:
import os
Code:
> 
> > import system
> 
> > from ftplib import FTP
> 
> >
> 
> > ftp = FTP('127.0.0.1')
> 
> > ftp.login('')
> 
> >
> 
> > directory = 'test'
> 
> > ftp.cwd(directory)
> 
> >
> 
> > files = ftp.nlst()
> 
> >
> 
> > for file in files:
> 
> >      if file.find(".txt") != -1:
> 
> >          file = (file [-21:])
> 
> >          ftp.delete(file)
> 
> >
> 
> > ftp.close()

>
> >

>
> > any ideas on this? thank you.

>
> >

>
> Firstly, instead of:
>
>
>
> file.find(".txt") != -1
>
>
>
> use:
>
>
>
> file.endswith(".txt")
>
>
>
> It's clearer (and it's true only if the ".txt" is at the end!)
>
>
>
> Secondly, your code assumes that the filename is exactly 21 characters.
>
> It looks like the strings returned by ftp.nlst() consist of 9 fields
>
> separated by whitespace, with the last field being the filename,
>
> which can also contain spaces. That being so, you can split the strings
>
> like this:
>
>
>
> fields = file.split(None, 9)
>
>
>
> That'll make a maximum of 9 splits on any whitespace, for example:
>
>
>
> >>> "-rwx------ 1 user group 0 Feb 04 15:57 New Text

>
> Document.txt".split(None, 9)
>
> ['-rwx------', '1', 'user', 'group', '0', 'Feb', '04', '15:57', 'New',
>
> 'Text Document.txt']
>
>
>
> Therefore:
>
>
>
> for entry in ftp.nlst():
>
> if entry.endswith(".txt"):
>
> filename = entry.split(None, 9)[-1]
>
> ftp.delete(filename)


On Tuesday, February 5, 2013 10:45:02 AM UTC-8, MRAB wrote:
> On 2013-02-05 17:29, (E-Mail Removed) wrote:
>
> > im trying to delete all text files from an ftp directory. is there a way to delete multiple files of the same extension?

>
> >

>
> > I came up with the following code below which works but I have to append the string because ftp.nlst returns:

>
> >

>
> > "-rwx------ 1 user group 0 Feb 04 15:57 New Text Document.txt"

>
> >

>
> > but then when I try to delete it that long file name which includes thedate doesnt exist - the files name is "new text document.txt" not "-rwx------ 1 user group 0 Feb 04 15:57 New Text Document.txt"

>
> >

>
> > so anyway I stripped off the the beginning keeping the last 21 characters and it worked great - this should work being that I know all my text files names are the same length in characters - but it seems like there shouldbe a better more bullet proof way to do this?

>
> >

>
> >
Code:
import os
Code:
> 
> > import system
> 
> > from ftplib import FTP
> 
> >
> 
> > ftp = FTP('127.0.0.1')
> 
> > ftp.login('')
> 
> >
> 
> > directory = 'test'
> 
> > ftp.cwd(directory)
> 
> >
> 
> > files = ftp.nlst()
> 
> >
> 
> > for file in files:
> 
> >      if file.find(".txt") != -1:
> 
> >          file = (file [-21:])
> 
> >          ftp.delete(file)
> 
> >
> 
> > ftp.close()

>
> >

>
> > any ideas on this? thank you.

>
> >

>
> Firstly, instead of:
>
>
>
> file.find(".txt") != -1
>
>
>
> use:
>
>
>
> file.endswith(".txt")
>
>
>
> It's clearer (and it's true only if the ".txt" is at the end!)
>
>
>
> Secondly, your code assumes that the filename is exactly 21 characters.
>
> It looks like the strings returned by ftp.nlst() consist of 9 fields
>
> separated by whitespace, with the last field being the filename,
>
> which can also contain spaces. That being so, you can split the strings
>
> like this:
>
>
>
> fields = file.split(None, 9)
>
>
>
> That'll make a maximum of 9 splits on any whitespace, for example:
>
>
>
> >>> "-rwx------ 1 user group 0 Feb 04 15:57 New Text

>
> Document.txt".split(None, 9)
>
> ['-rwx------', '1', 'user', 'group', '0', 'Feb', '04', '15:57', 'New',
>
> 'Text Document.txt']
>
>
>
> Therefore:
>
>
>
> for entry in ftp.nlst():
>
> if entry.endswith(".txt"):
>
> filename = entry.split(None, 9)[-1]
>
> ftp.delete(filename)



wow, thank you very much thats a huge help.

Chris
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
multiple file deletes using ftp.delete Drew Python 1 01-20-2007 07:58 AM
multiple clients updating same file in ftp muttu2244@yahoo.com Python 6 01-10-2006 10:00 PM
Text files read multiple files into single file, and then recreate the multiple files googlinggoogler@hotmail.com Python 4 02-13-2005 05:44 PM
Net::FTP problems getting files from Windows FTP server, but not Linux FTP Server. D. Buck Perl Misc 2 06-29-2004 02:05 PM
Symply: code lines to read, write and delete files on FTP Biuri Java 0 07-21-2003 11:27 AM



Advertisments