txt - ¿Cómo importar otros archivos de Python?
leer una linea especifica de un archivo en python (13)
Hay muchas formas de importar un archivo de python, todas con sus pros y sus contras.
No solo elija rápidamente la primera estrategia de importación que funcione para usted, sino tendrá que volver a escribir el código base más adelante cuando descubra que no satisface sus necesidades.
Comenzaré explicando el ejemplo más fácil # 1, luego avanzaré hacia el ejemplo # 7 más profesional y sólido.
Ejemplo 1, importar un módulo de python con intérprete de python:
Ponga esto en /home/el/foo/fox.py:
def what_does_the_fox_say(): print("vixens cry")
Entrar en el intérprete de python:
el@apollo:/home/el/foo$ python Python 2.7.3 (default, Sep 26 2013, 20:03:06) >>> import fox >>> fox.what_does_the_fox_say() vixens cry >>>
Importó fox a través del intérprete de python, invocó la función de python
what_does_the_fox_say()
desde fox.py.
Ejemplo 2, use execfile
o ( exec
en Python 3 ) en un script para ejecutar el otro archivo de Python en su lugar:
Ponga esto en /home/el/foo2/mylib.py:
def moobar(): print("hi")
Ponga esto en /home/el/foo2/main.py:
execfile("/home/el/foo2/mylib.py") moobar()
ejecuta el archivo:
el@apollo:/home/el/foo$ python main.py hi
La función moobar se importó de mylib.py y se puso a disposición en main.py
Ejemplo 3, Usar desde ... importar ... funcionalidad:
Ponga esto en /home/el/foo3/chekov.py:
def question(): print "where are the nuclear wessels?"
Ponga esto en /home/el/foo3/main.py:
from chekov import question question()
Ejecutalo de esta manera:
el@apollo:/home/el/foo3$ python main.py where are the nuclear wessels?
Si define otras funciones en chekov.py, no estarán disponibles a menos que
import *
Ejemplo 4, Importar riaa.py si está en una ubicación de archivo diferente de donde se importa
Coloca esto en /home/el/foo4/stuff/riaa.py:
def watchout(): print "computers are transforming into a noose and a yoke for humans"
Ponga esto en /home/el/foo4/main.py:
import sys import os sys.path.append(os.path.abspath("/home/el/foo4/stuff")) from riaa import * watchout()
Ejecutarlo:
el@apollo:/home/el/foo4$ python main.py computers are transforming into a noose and a yoke for humans
Eso importa todo en el archivo extranjero desde un directorio diferente.
Ejemplo 5, use os.system("python yourfile.py")
import os
os.system("python yourfile.py")
En el ejemplo 6, importe su archivo mediante piggybacking el inicio de python:
Consulte: https://docs.python.org/3/library/user.html
Coloque este código en su directorio de inicio en ~/.pythonrc.py
class secretclass:
def secretmessage(cls, myarg):
return myarg + " is if.. up in the sky, the sky"
secretmessage = classmethod( secretmessage )
def skycake(cls):
return "cookie and sky pie people can''t go up and "
skycake = classmethod( skycake )
Ponga este código en su main.py (puede estar en cualquier lugar):
import user
msg = "The only way skycake tates good"
msg = user.secretclass.secretmessage(msg)
msg += user.secretclass.skycake()
print(msg + " have the sky pie! SKYCAKE!")
Ejecutarlo:
$ python main.py
The only way skycake tates good is if.. up in the sky,
the skycookie and sky pie people can''t go up and have the sky pie!
SKYCAKE!
El crédito para esta jist va a: https://github.com/docwhat/homedir-examples/blob/master/python-commandline/.pythonrc.py Envíe sus botes de carga.
Ejemplo 7, el más robusto: importa archivos en python con el comando de importación simple:
- Hacer un nuevo directorio
/home/el/foo5/
- Crear un nuevo directorio
/home/el/foo5/herp
Haga un archivo vacío llamado
__init__.py
bajo herp:el@apollo:/home/el/foo5/herp$ touch __init__.py el@apollo:/home/el/foo5/herp$ ls __init__.py
Crear un nuevo directorio / home / el / foo5 / herp / derp
Bajo derp, haga otro archivo
__init__.py
:el@apollo:/home/el/foo5/herp/derp$ touch __init__.py el@apollo:/home/el/foo5/herp/derp$ ls __init__.py
Debajo de / home / el / foo5 / herp / derp
yolo.py
un nuevo archivo llamadoyolo.py
Ponga esto ahí:def skycake(): print "SkyCake evolves to stay just beyond the cognitive reach of " + "the bulk of men. SKYCAKE!!"
El momento de la verdad,
/home/el/foo5/main.py
el nuevo archivo/home/el/foo5/main.py
, pon esto ahí;from herp.derp.yolo import skycake skycake()
Ejecutarlo:
el@apollo:/home/el/foo5$ python main.py SkyCake evolves to stay just beyond the cognitive reach of the bulk of men. SKYCAKE!!
El archivo vacío
__init__.py
comunica al intérprete de python de que el desarrollador pretende que este directorio sea un paquete importante.
Si desea ver mi publicación sobre cómo incluir TODOS los archivos .py en un directorio, consulte aquí: https://stackoverflow.com/a/20753073/445131
Bono protip
ya sea que esté usando Mac, Linux o Windows, debe usar el editor inactivo de python como se describe aquí. Se desbloqueará su mundo python. http://www.youtube.com/watch?v=DkW5CSZ_VII
¿Cómo importo otros archivos en Python?
- ¿Cómo puedo importar exactamente un archivo python específico como
import file.py
? - ¿Cómo puedo importar una carpeta en lugar de un archivo específico?
- Quiero cargar un archivo de Python dinámicamente en tiempo de ejecución, basado en la entrada del usuario.
- Quiero saber cómo cargar solo una parte específica del archivo.
Por ejemplo, en main.py
tengo:
from extra import *
Aunque esto me da todas las definiciones en extra.py
, cuando tal vez lo único que quiero es una sola definición:
def gap():
print
print
¿Qué agrego a la declaración de import
para obtener un gap
de extra.py
?
Esto puede parecer una locura pero solo puede crear un enlace simbólico al archivo que desea importar si solo está creando un script de envoltorio para él.
Hay muchas formas, como se indica arriba, pero me parece que solo quiero importar el contenido de un archivo, y no quiero tener que escribir líneas y líneas y tener que importar otros módulos. Por lo tanto, se me ocurrió una forma de obtener el contenido de un archivo, incluso con la sintaxis de puntos ( file.property
) en lugar de fusionar el archivo importado con el suyo.
En primer lugar, aquí está mi archivo que importaré, data.py
testString= "A string literal to import and test with"
Nota: Podrías usar la extensión .txt
lugar.
En mainfile.py
, comience abriendo y obteniendo los contenidos.
#!usr/bin/env python3
Data=open(''data.txt'',''r+'').read()
Ahora tiene el contenido como una cadena, pero intentar acceder a data.testString
causará un error, ya que los data
son una instancia de la clase str
, e incluso si tiene una propiedad testString
, no hará lo que esperaba.
A continuación, crea una clase. Por ejemplo (juego de palabras destinado), ImportedFile
class ImportedFile:
Y poner esto en ella (con la sangría apropiada):
exec(data)
Y finalmente, reasignar data
manera:
data=ImportedFile()
¡Y eso es! Simplemente acceda como lo haría para cualquier otro módulo, al escribir print(data.testString)
se imprimirá en la consola A string literal to import and test with
.
Sin embargo, si desea el equivalente de from mod import *
solo descarte la clase, la asignación de instancia y anule la exec
del exec
.
Espero que esto ayude:)
-Benji
La mejor manera de importar archivos .py es a través de __init__.py
. Lo más sencillo es crear un archivo vacío llamado __init__.py
en el mismo directorio en el que se encuentra su archivo.py.
esta post de Mike Grouchy es una gran explicación de __init__.py
y su uso para crear, importar y configurar paquetes de Python.
Lo que importa es importar el archivo y usar la abreviatura de su nombre.
import DoStuff.py as DS
DS.main()
No olvide que su archivo de importación DEBE tener un nombre con la extensión .py
Me gustaría añadir esta nota, no muy claramente en otra parte; dentro de un módulo / paquete, al cargar desde archivos, el nombre del módulo / paquete debe tener el prefijo mymodule
. Imagina que mymodule
un diseño como este:
/main.py
/mymodule
/__init__.py
/somefile.py
/otherstuff.py
Al cargar somefile.py
/ otherstuff.py
desde __init__.py
el contenido debería verse así:
from mymodule.somefile import somefunc
from mymodule.otherstuff import otherfunc
No tiene muchos métodos complejos para importar un archivo de python de una carpeta a otra. Simplemente cree un archivo __init__.py para declarar que esta carpeta es un paquete de Python y luego vaya a su archivo host donde desea importar, simplemente escriba
from root.parent.folder.file import variable, class, whatever
Para importar un archivo Python específico en ''runtime'' con un nombre conocido:
import os
import sys
...
scriptpath = "../Test/MyModule.py"
# Add the directory containing your module to the Python path (wants absolute paths)
sys.path.append(os.path.abspath(scriptpath))
# Do the import
import MyModule
Solo para importar el archivo python en otro archivo python
digamos que tengo el archivo python helper.py que tiene una función de visualización como,
def display():
print("I''m working sundar gsv")
Ahora en app.py , puedes usar la función de visualización,
import helper
helper.display()
La salida,
I''m working sundar gsv
NOTA: No es necesario especificar la extensión .py.
También puede hacer esto: from filename import something
ejemplo: from client import Client
Tenga en cuenta que no necesita la extensión .py .pyw .pyui
.
Los archivos __init__.py
son necesarios para hacer que Python trate los directorios como que contienen paquetes, esto se hace para evitar que los directorios con un nombre común, como una cadena, oculten involuntariamente módulos válidos que ocurren más adelante en la ruta de búsqueda del módulo.
__init__.py
solo puede ser un archivo vacío, pero también puede ejecutar el código de inicialización del paquete o establecer la variable __all__
.
mydir/spam/__init__.py
mydir/spam/module.py
import spam.module
or
from spam import module
importlib
es una adición reciente en Python para importar mediante programación un módulo. Es solo un envoltorio alrededor de __import__
Ver https://docs.python.org/3/library/importlib.html#module-importlib
import importlib
moduleName = input(''Enter module name:'')
importlib.import_module(moduleName)
Actualización: la respuesta a continuación está desactualizada . Utilice la alternativa más reciente arriba.
Solo
import file
sin la extensión ''.py''.Puede marcar una carpeta como un paquete, agregando un archivo vacío llamado
__init__.py
.Puedes usar la función
__import__
. Toma el nombre del módulo como una cadena. (De nuevo: nombre del módulo sin la extensión ''.py''.)pmName = input(''Enter module name:'') pm = __import__(pmName) print(dir(pm))
Escriba
help(__import__)
para más detalles.
from file import function_name ######## Importing specific function
function_name() ######## Calling function
y
import file ######## Importing whole package
file.function1_name() ######## Calling function
file.function2_name() ######## Calling function
Estas son las dos formas simples que he entendido hasta ahora y asegúrese de que su archivo "file.py" que desea importar como una biblioteca esté presente solo en su directorio actual.