python目錄結構
『壹』 python怎樣爬取網站目錄結構
抓取每一頁的所有a標簽,採集所有href屬性,分離域名,把此網站域名下的地址標記為採集入庫條件,然後計算第一次採集到的地址的hash,如果hash重復,則不入庫,否則入庫再迭代二次採集,直到所有href的hash都復為結束條件,程序則認為資料庫中已採集到此域下的所有地址,即可以開始抓站
『貳』 Python 蛋疼的單元測試,有什麼好的目錄結構
根目錄下建立一個 tests
然後按照 test_UNIT.py 這種格式來命名,如果代碼量較多則根據功能建立些子文件夾來分分類,就好了
可以參考 requests, django 的源碼來看
『叄』 Python其實很簡單 第十六章 目錄管理
為實現「按名存取」,必須建立文件名與輔存空間中物理地址的對應關系,體現這種對應關系的數據結構稱為文件目錄。文件目錄表目至少要包含文件名、文件的類型、文件的長度、訪問許可權、建立時間、訪問時間和文件存儲地址等內容。通過前面一章的介紹,我們已經知道在文件信息中已經包含了文件名、文件類型訪問許可權等信息,而存儲地址的信息則包含在目錄信息中。
16.1路徑
路徑通常用一個字元串來表示,可以按照路徑信息定位到一個目錄或文件。如:「C:UsersAdministratorPictures1.jpg」這個信息可以非常方便的找到這個圖片文件,「C:UsersAdministratorPictures」這個信息可以幫助我們找到更多的圖片文件。
這里所說的「路徑」和上網時碰到的「地址」含義比較相似,互聯網就相當於將個人電腦可以訪問的范圍擴大了,互聯網中的地址也是對應某一個存儲空間的路徑,按照地址可以訪問互聯網上的信息,就如同按照路徑可以找到計算機中的文件一樣。
在Python中,可以導入 os模塊 來進行目錄操作。
1、獲取當前工作目錄getcwd()函數
例:
import os
print(os.getcwd())
運行結果:
C:
這個路徑是當前Python IDLE所在的地址。
2、獲取文件的絕對路徑abspath()函數
abspath()函數是os模塊的子模塊path提供的一個函數。用法舉例如下:
import os
print(os.path.abspath(r'test.txt'))
運行結果:
C: est.txt
16.2 目錄操作類函數
1、判斷目錄是否存在exists()函數
exists()函數是os模塊的子模塊path中的函數。使用方法舉例如下:
import os
print(os.path.exists(r'C:UsersAdministratorPictures1.jpeg'))
輸出結果:
True
2、創建目錄mkdir()函數和makedirs()函數
mkdir()函數和makedirs()函數都是由os模塊提供的,下面舉例說明用法和區別。
例1:
import os
path='d:test'
if not os.path.exists(path):
os.makedirs(path)
print('該文件目錄創建成功!')
如果目錄d: est已存在,則不再創建;若不存在,則創建。
例2:
import os
path='d:testtest1test11'
if not os.path.exists(path):
os.makedirs(path)
print('該文件目錄創建成功!')
雖然目錄d: est已存在,但可以在其下繼續創建子目錄。上面的代碼可以成功地創建d: est est1 est11目錄。
mkdir()函數和makedirs()函數用法基本一樣,不同之處在於mkdir()函數只能能創建一級目錄。
3、刪除目錄函數rmdir()函數
rmdir()函數是由os模塊提供的。
例如:通過上面的例子已經建立了d: est est1 est11目錄,現在去刪除子目錄test11(此子目錄為空目錄),代碼如下:
import os
os.rmdir('d:testtest1test11')
如果要刪除的目錄非空(其下還包含有文件或文件夾),則不能刪除,並且出現Windows文件操作錯誤的提示(Python是調用操作系統命令完成文件和目錄操作的)。譬如d: est目錄下含有有子目錄,則不能對其進行如下刪除操作。
import os
os.rmdir('d:test')
此時,會出現如下錯誤提示:
Traceback (most recent call last):
File "C:/Users/zym/AppData/Local/Programs/Python/Python39/4.py", line 10, in
os.rmdir('d:test')
OSError: [WinError 145] 目錄不是空的。: 'd:test'
4、刪除非空目錄函數rmtree()函數
rmtree()函數是由Python內置的標准模塊shutil提供的,可以刪除目錄及目錄下的文件和子目錄。如刪除d: est目錄及其下的子目錄和文件,可用如下代碼:
import shutil
shutil.rmtree('d:test')
5、遍歷目錄walk()函數
walk()函數是由os模塊提供的。
語法格式:
os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])
其中,top是所要遍歷的目錄的地址;topdown為可選參數,為 True時自上而下遍歷 目錄,為False時自下而上遍歷目錄,默認值為True;onerror為可選參數,用於指定異常處理方式,默認為忽略;followlinks為可選參數,如果為 True,則會遍歷目錄下的快捷方式(linux 下是軟連接 symbolic link )實際所指的目錄(默認關閉),如果為 False,則優先遍歷 top 的子目錄。
該函數的返回值為一個三元組(root,dirs,files)。root 所指的是當前正在遍歷的這個文件夾的本身的地址;dirs 是一個 list ,內容是該文件夾中所有的目錄的名字(不包括子目錄);files 同樣是 list , 內容是該文件夾中所有的文件(不包括子目錄)。
例:遍歷d: est目錄及其子目錄下的所有子目錄和文件:
d: est目錄及其下的子目錄和文件
import os
path='d:test'
tups=os.walk(path) # 函數walk()的返回值為三元組
for root,dirs,files in tups: # 遍歷這個三元組
for name in dirs: #遍歷存放目錄值的元組
print('dir:',os.path.join(root,name))
for name in files: #遍歷存放文件名值的元組
print('file:',os.path.join(root,name))
運行結果如下:
dir: d: est est1
dir: d: est est1 est11
dir: d: est est1新建文件夾
file: d: est est1新建文本文檔.txt
file: d: est est1 est11新建文本文檔.txt
『肆』 如何設計結構清晰的 Python 工程目錄結構
1. 使用專業的項目構建發布工具來構建項目目錄. 如 buildout . 其目錄結構絕對比自己創建來的漂亮.
2. log目錄最好不要放到項目里
3. 缺少 setup.py
4. 缺少 requirements.txt
『伍』 python import 路徑問題 新手
以下為純手打,下面給幾個demos:
說明:
moles所在的目錄在python里叫package, 下面是一個名為 IsDir的package(實際上就是一個目錄), package下面有4個moles(A, B, C, D)和一個__init__.py文件,目錄結構如下:
IsDir/
A.pyB.pyC.pyD.py__init__.py
大體來講,有兩種方法可以調用某目錄下(包括遞歸目錄)的moles.
一. __init__.py為空時
1.1以下為調用moleA的代碼:
#!/usr/bin/envpython
fromIsDirimportA
A.say()
輸出:
ThisismoleA!
1.2 如果想調用moleA,B,C,D呢?
方法1.
#!/usr/bin/envpython
fromIsDirimportA
fromIsDirimportB
fromIsDirimportC
fromIsDirimportD
A.say()
B.say()
C.say()
D.say()
方法2.
#!/usr/bin/envpython
importIsDir.A
importIsDir.B
importIsDir.C
importIsDir.D
fromIsDirimport*
A.say()
B.say()
C.say()
D.say()
錯誤示例1:
#!/usr/bin/envpython
importIsDir.A
A.say()
錯誤示例2:
#!/usr/bin/envpython
fromIsDirimport*
A.say()
錯誤的原因:
IsDir/目錄下__init__.py為空時,直接importIsDir.A或者fromIsDirimport*是無效的.
從官方文檔里可以看到,__init__.py 里沒有__all__=[mole1,mole2,...]時,
fromIsDirimport* 只能保證IsDir被imported, 所以此時IsDir里的moles是無法被imported,
此時只有如我上面所寫的代碼所示才能正確執行,否則是錯誤的。官方解釋為:importIsDir.A並無任何意義,只有接著執行fromIsDirimport*後,importIsDir.A語句里的moleA才會被定義,所以完整的調用因改為: 1. import IsDir.A 2. from IsDir import *。
二. __init__.py用all=[...]指定該package下可以被imported進去的mole
__init__.py里寫入如下內容:
%catIsDir/__init__.py
__all__=["A","B"]
然後使用之:
#!/usr/bin/envpython
fromIsDirimport*
A.say()
B.say()
結果:
%pythontest.py
ThisismoleA!
ThisismoleB!
錯誤實例:
#!/usr/bin/envpython
fromIsDirimport*
C.say()
以上示例之所以錯誤,是因為C並沒有在__all__=["A","B"]里制定,由此可見,packageIsDir下面的__init__.py里,__all__=[...]具有隔離moles的作用。
補充:
mole A, B, C,D里我分別只定義了一個method, 例如,以下為mole A的code:
%catIsDir/A.py
defsay():
print"ThisismoleA!"
後記:
謝謝這位同學,回答你的問題感覺很有收獲,順便又把python溫習了一遍。回頭把這些總結貼到我的blog上以上為手寫,望採納,共勉。
=============================================================
老子寫了這么多居然採用了另一個簡陋的答案,mlgb的,枉我熬夜給你答題。這種白痴樓主就不配在這里問問題。
『陸』 python文件名獲取文件路徑
概述
使用os.path.abspath()函數來獲取文件絕對路徑
解析
文件目錄結構如下:
os.path.abspath(path)返回path規范化的絕對路徑(但這個路徑不一定是真實的路徑),如果path僅是一個文件名,使用該函數後返回的路徑是當前工作目錄路徑連接改文件名後所組成的新的路徑名。
>>> import os.path
>>> os.path.abspath("a.py")
'C:\Users\Administrator\a.py'
os.path.split(path)將path分割成目錄和文件名二元組返回
>>> os.path.split("C:\Users\Administrator\a.py")
('C:\Users\Administrator', 'a.py')
os.path.dirname(path)返回path的目錄,其實就是os.path.split(path)的第一個元素
>>> os.path.dirname("C:\Users\Administrator\a.py")
'C:\Users\Administrator'
os.path.basename(path)返回path最後的文件名。如果path以/或結尾,就會返回空值。即os.path.split(path)的第二個元素。
>>> os.path.basename("C:\Users\Administrator\a.py")
'a.py'
os.path.commonprefix(list)返回list中所有path共有的最長的路徑,從左向右,相同字元。
os.path.exists(path)如果path存在,返回True;如果path不存在,返回False。
os.path.isabs(path)如果path是絕對路徑,返回True。
os.path.normpath(path)規范path字元串形式(規範文件路徑)
os.path.isfile(path)判斷路徑是否為文件,是返回True,否則返回False
os.path.isdir(path)如果path是一個存在的目錄,返回True,否則返貨False。
os.path.islink(path)是否是鏈接;但如果系統不支持鏈接,則返回False。