2010-01-07 2 views
2

Я новичок, проходящий через байт python (3.0). Это первый язык программирования, который я когда-либо использовал. Я застрял в точке, где вы создаете простую программу, которая создает резервный zip-файл (стр.75). Я запускаю Windows 7 (64 бит) с помощью python 3.1. До этого я установил GNUWin32 + источники и добавил C: \ Program Files (x86) \ GnuWin32 \ bin в переменную enviornmental. Это программа:Новичок нуждается в помощи с Python Tutorial

#!C:\Python31\mystuff 
# Filename : my_backup_v1.py 

import os 
import time 
# backing up a couple small files that I made 
source = [r'C:\AB\a', r'C:\AB\b'] 

#my back up directory 
target_dir = 'C:\\Backup' 

#name of back up file 
target = target_dir + os.sep + time.strftime('%Y%m%d%H%M%S') + '.zip' 


zip_command = "zip -qr {0} {1}".format(target,' '.join(source)) 

print(zip_command) 

if os.system(zip_command) == 0: 
    print('Successful backup to', target) 
else: 
    print('Backup failed!') 
    print('source files are', source) 
    print('target directory is', target_dir) 
    print('target is', target) 

Выход:

zip -qr C:\Backup\20100106143030.zip C:\AB\a C:\AB\b 
Backup failed! 
source files are ['C:\\AB\\a', 'C:\\AB\\b'] 
target directory is C:\Backup 
target is C:\Backup\20100106143030.zip 

Учебное пособие включает в себя небольшой совет немного по устранению неисправностей: скопируйте и вставьте zip_command в строке оболочки Python, чтобы увидеть, если это по крайней мере работает:

>>> zip -qr C:\Backup\20100106143030.zip C:\AB\a C:\AB\b 
SyntaxError: invalid syntax (<pyshell#17>, line 1) 

Так как это не сработало, в учебнике говорится, что для получения дополнительной справки прочтите руководство GNUWin32. Я просмотрел его и еще не видел ничего, что поможет мне. Для того, чтобы увидеть, если функция зип работает я сделал помощь (ZIP) и получил следующее:

>>> help(zip) 
Help on class zip in module builtins: 

class zip(object) 
| zip(iter1 [,iter2 [...]]) --> zip object 
| 
| Return a zip object whose .__next__() method returns a tuple where 
| the i-th element comes from the i-th iterable argument. The .__next__() 
| method continues until the shortest iterable in the argument sequence 
| is exhausted and then it raises StopIteration. 
| 
| Methods defined here: 
| 
| __getattribute__(...) 
|  x.__getattribute__('name') <==> x.name 
| 
| __iter__(...) 
|  x.__iter__() <==> iter(x) 
| 
| __next__(...) 
|  x.__next__() <==> next(x) 
| 
| ---------------------------------------------------------------------- 
| Data and other attributes defined here: 
| 
| __new__ = <built-in method __new__ of type object at 0x1E1B8D80> 
|  T.__new__(S, ...) -> a new object with type S, a subtype of T 

Unfortuneatly Я не могу понять «помощь» еще. Однако я немного поиграл с функцией zip, чтобы увидеть, как это работает.

>>> zip (r'C:AB\a') 
<zip object at 0x029CE8C8> 

Таким образом, кажется, что функция zip работает, но я думаю, что я не использую ее правильно. Пожалуйста, помогите мне, и имейте в виду, что у меня еще не было большого опыта программирования. Если вы хотите просмотреть учебник, вы можете найти его на сайте www.swaroopch.com/notes/Python.

+1

Похоже, что вы должны были сделать 'почтовый -qr C: \ Backup \ 20100106143030.zip C: \ АВ \ С: \ AB \ b' в приглашении терминала, а не в приглашении python. Это помогает? –

ответ

1

Причина «zip -qr C:\Backup\20100106143030.zip C:\AB\a C:\AB\b» не указана в приглашении, так как в этом случае «zip» должен быть командой, которую вы отправляете операционной системе ... не имеет ничего общего с Python.

Это немного запутанно, я боюсь - когда вы делали «zip(r'C:AB\a')», вы использовали встроенную функцию zip() Python, которая не связана с тем, что вы пытаетесь сделать.

У вас есть правильная строчка каталога? Я имею в виду, существуют ли C: \ AB \ a и C: \ AB \ b?

Редактировать - Вы должны скопировать/вставить эту длинную строку «zip» в командную строку (нажмите клавишу «ключ» + «R», затем введите «cmd» и нажмите enter), чтобы узнать, работает ли она; а не оболочкой Python.

+0

да, C: AB \ a и C: \ AB \ b существуют. Это небольшие папки, которые я создал. ОК, поэтому функция zip в python отдельно от zip, которую я должен использовать здесь. В этом случае, что мне нужно сделать, чтобы заставить ОС использовать команду zip? У меня есть 7zip & GNUWin32, если это полезно. –

+0

'os.system (zip_command)' должен работать, как и в вашем коде. Попробуйте эту команду (zip -qr C: ... и т. Д.) В командной строке Windows (отредактированные инструкции в моем сообщении). – Sapph

+0

Хорошо попробовал, что в командной строке Windows не получилось сообщение об ошибке: «zip» не распознается как внутренняя или внешняя командная исполняемая программа или командный файл. И что теперь? –

1

Это не дает вам помощь для команды оболочки zip, это дает вам помощь для функции python zip, которая не связана с сжатием ZIP-файла.

1

несколько предложений для Вас, чтобы использовать для улучшения:

Используйте команду subprocess.call([command', 'arg', 'arg', 'arg']) для вызова внешней команды молнии. Это гарантирует, что команда будет правильно вызвана, если данные будут экранированы должным образом.

Используйте os.path.join, чтобы соединиться с компонентами вместе. Это также поможет предотвратить тонкие ошибки.

Убедитесь, что ваша команда zip работает из командной строки перед ее попыткой в ​​python.

-

Кроме того, это выглядит довольно хорошо.

PS. zip() - встроенный, используемый для соединения двух итераций. Не для zip-файлов.


Важно: см Андреевский комментарий (скопированный здесь для справки):
Похоже, что вы должны были сделать zip -qr C:\Backup\20100106143030.zip C:\AB\a C:\AB\b на терминале, а не питона строке. Это помогает? - Эндрю Макгрегор 3 минуты назад

+0

Я попытался скопировать это в командную строку, и кажется, что ОС не распознает команду «zip» по той или иной причине. Я еще не знаком с subprocess.call, поэтому мне нужно будет прочитать, как использовать это, чтобы вызвать команду zip. –

2
>>> zip -qr C:\Backup\20100106143030.zip C:\AB\a C:\AB\b 

звучит как команды вы должны ввести в оболочку операционной системы, а не в оболочке Python. Может быть, вы можете попробовать

os.system('zip -qr C:\Backup\20100106143030.zip C:\AB\a C:\AB\b') 

в питона оболочки ...

+0

копия вставляется в оболочку. Результат был 1, поэтому я предполагаю, что это сработало? Однако я не вижу файл резервной копии. –

Смежные вопросы