2013-08-04 3 views
0

Я работаю через Изучение Python Hard Way, и, возможно, это будет немного ускориться для меня. Я ввел следующий код вместе с соответствующим файлом. В файле ру, я писал:Открытие файлов с помощью Python

#!/usr/bin/python 

from sys import argv 

script, filename = argv 

txt = open(filename) 

print "Here's your file %r:" % filename 
print txt.read() 

print "Type the filename again:" 
file_again = raw_input("> ") 

txt_again = open(file_again) 

print txt_again.read() 

И запустить его, я писал: python script.py readme.txt который бежал код.

Однако, я не совсем понимаю, процесс здесь:

  • Каким #!/usr/bin/python должны быть в верхней части файла
  • Что sys import argv
  • Что script, filename = argv
  • ли .read() встроенная функция?
+5

http://docs.python.org/2/tutorial/ –

ответ

3
  1. #!/usr/bin/python является так называемая хижину, подсказка к ядру ОС, что это сценарий Python, который должен быть выполнен с заданной двоичной Python. Таким образом, если вы используете chmod +x сценарий, вы можете даже позвонить ему с ./script.py readme.txt.

  2. from sys import argv является команда импорта argv с модуля sys непосредственно в наше пространство имен. Поэтому мы можем использовать argv для доступа к нему вместо sys.argv. Если мы используем его только один раз, может быть лучше всего import sys и получить доступ ко всему внутри, например,sys.argv. Об этом вы узнаете в документах и ​​/ или учебниках Python.

  3. script, filename = argv является сокращением для

    script = argv[0] 
    filename = argv[1] 
    

    до тех пор, как argv содержит ровно 2 элемента. Об этом вы узнаете в документах и ​​/ или учебниках Python.

  4. file.read() действительно встроенный, но как метод объекта файла, а не как функция как таковая.

2

Ответы:

1) #/USR/бен/питон там для пользователей UNIX, это показывает питона, где найти определенные файлы. (Why do people write #!/usr/bin/env python on the first line of a Python script?)

2) SYS импорта ARGV является файл в аргументе [readme.txt] (http://www.tutorialspoint.com/python/python_command_line_arguments.htm)

3) сценарий, имя файла = ARGV сценария и имя файла [новые переменные] принимает значение от ARGV ,

4) Да, .read() - встроенная функция. (http://www.diveintopython.net/file_handling/file_objects.html)

Google является вашим другом на этом ...

+0

Я не могу найти встроенную функцию 'read()' здесь: http://docs.python.org/2/library/ functions.html # встроенные функции –

+0

Хмм, странно. Я дал источник, который сказал, что это было ... –

+0

Из вашего источника: «Метод' read' ** ** считывает указанное количество байтов », там нет встроенной функции. ['read' - метод файловых объектов] (http://docs.python.org/2/tutorial/inputoutput.html#methods-of-file-objects). –

2

1) Unix-подобные конвенции. Это позволяет определить, что делать с файлом, как только будет прочитана первая строка файла.

2) from sys import argv средство импортировать только argv из модуля под названием sys

3) а, б = 1,2 присваивает 1 к и от 2 до б. Если есть _iterable_ объект на RHS, то такие конструкции эквивалентны:

script, filename = argv 

===

script = argv[0] 
filename = argv[1] 

4) Да. Возможно, не встроенный строго говоря - это просто функция, предоставляемая в одном из стандартных модулей ввода вывода Python.

2

#!/usr/bin/python превратит ваш скрипт python в исполняемый файл, специальный трюк unix. Исполняемые скрипты обычно начинаются с строки, начинающейся с символов #! («Hash bang»), а затем путь к интерпретатору Python на вашем компьютере. Затем, изменив режим на + x этого конкретного файла сценария, вы сможете выполнить его в приглашении, просто позвонив по имени. Поскольку этот путь может быть различным для разных машин, вы можете использовать UNIX «ENV» обходной путь: #/USR/бен/окр питон Это позволит программе окр найти интерпретатор питона и выполнить код

Из импорта modulename что-то используется для импорта модуля, но мы импортируем атрибут argv из модуля sys. Это точно так же, как импорт, но для вас немного больше работы, где в этом случае он копирует атрибут модуля (argv), чтобы они стали простыми переменными в сценарии получателя.

script, filename = argv просто назначит argv [0] и argv [1] для скрипта и имени файла соответственно.

И, наконец, file.read - встроенный метод для файловых объектов.

+1

+1, но she-bang не превратит скрипт в исполняемый файл, строго говоря. Это один из двух предикатов для этого, как вы пишете позже. Но я не знаю лучшей формулировки, увы ... – glglgl

+0

Вы правы, дополнительный шаг изменения режима сценария на + x также необходим, чтобы сделать его исполняемым. Я должен был сказать, что это первый шаг в создании исполняемый файл сценария. Спасибо за комментарий! – Amit

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