問題:
最近在學習import的時候,發現不像import xxx,或者from xxx import ooo
這樣簡單。比如,看下面這個圖:
要導入才能在te.py調用pre.tab.py??
直接導入:
import pre_tab
Traceback (most recent call last): File "C:/Users/Administrator/PycharmProjects/laonanhai/shop_store/test/te.py", line 14, in <module> import pre_tab ImportError: No module named 'pre_tab'
知識點:
通過看視頻,學到了下面兩點:
1. os.path.abspath(__file__) 返回當前文件的絕對路徑
在te.py文件下:
import os x = os.path.abspath(__file__) print(x)
輸出:

2.os.path.dirname() 返回當前文件的上一層路徑
在te.py文件下:
x1 = os.path.dirname(os.path.dirname(x)) print(x1) sys.path.append(x1) print(sys.path
輸出:

最后,通過print(sys.path)可以看到,
C:\Users\Administrator\PycharmProjects\laonanhai\shop_store路徑已經加入sys.path
額外收獲
在pre_tab.py文件下:
""" C:\Users\Administrator\PycharmProjects\laonanhai\shop_store\pre_tab.py """ print("AA")
竟然,曝錯了!!!
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 3-4: truncated \UXXXXXXXX escape
后來參考了
http://blog.csdn.net/wlsyn/article/details/49613867原來是文件路徑中,反斜杠 \u 報的錯,在反斜杠后面再加一個反斜杠轉義了就行了,經測試,注釋后的代碼不報錯,去掉注釋,也能正常讀寫文件
隨筆補充:關於__import__
obj = __import__("lib.manager") print(obj) #沒有導入manager.py #<module 'lib' from 'C:\\Users\\Administrator\\PycharmProjects\\laonanhai\\day6_test\\lib\\__init__.py'> obj.order() #AttributeError: 'module' object has no attribute 'order'
obj1 = __import__("lib.manager", fromlist=True) #表示按路徑連接方式導入 print(obj1) #導入manager #<module 'lib.manager' from 'C:\\Users\\Administrator\\PycharmProjects\\laonanhai\\day6_test\\lib\\manager.py'> obj1.order() #成功執行lib下的manager.py的order()方法
出處:http://www.cnblogs.com/0zcl