可以通過命令:"chmod755test.sh"進行修改
linux文件或目錄的許可權分為,讀、寫、可種許可權。文件訪問的用,文件創建者、與文件創建者同組的用戶、其他用戶三類。修改文件的許可權或目錄的命令為:"chmod755test.sh"。
B. window系統用python打開文件的時候,遇到permission denied錯誤怎麼辦,我更改磁碟的許可權之後也不行
把你的報錯截抄圖發出來看看,或者檢查你的PATH是不是正確設置,難道你沒有本機管理員許可權嗎?看看《Linux就該這么學》 裡面有個專欄是 Linux命令大全(手冊,
當我們在windows下執行python腳本時,經常會遇到許可權不足,需要管理員許可權才能執行的情況。
現在我們採用比較笨的方法來達到我們能執行的目的:
1.創建一個空的bat文件,動態寫入cmd命令;
2.創建一個固定內容的vb腳本;
3.python調用vb腳本去執行bat文件。
vb腳本內容:
cwd = CreateObject("Scripting.FileSystemObject").GetFile(Wscript.ScriptFullName).ParentFolder.Path
path = cwd & "\cmd.bat"
Set shell = CreateObject("Shell.Application")
shell.ShellExecute path,"","","runas",1
WScript.Quit
C. Python包之OS
參考: https://docs.python.org/3/library/os.html
Python中對OS模塊的定位是:提供了使用操作系統的工具介面。
如果你想讀寫文件,可以參考open();
如果你想操作文件路徑,參考os.path模塊;
如果你想在命令行讀取所有文件的所有行,參考fileinput模塊;
如果你想創建臨時文件或目錄,參考tempfile模塊;
如果你想更高級的文件和路徑處理,參考shutil模塊;
內置的OSError異常類型,比如在使用os模塊中的函數介面時,在參數中提供了無效的文件或路徑,就回報錯os.error。
該變數返回當前操作系統的類型,當前只注冊了3個值:分別是posix , nt , java, 對應linux/windows/java虛擬機。
在Python中,文件名,命令行參數和環境變數都是用字元串類型來表示。
接下來的這些函數和數據提供了當前進程和用戶的信息狀態和操作介面。
返回進程式控制制終端的文件名,適用於Unix系統。
返回字元串到環境變數的映射。
改變當前工作目錄到指定的路徑,path為要切換到的新路徑。
通過文件描述符改變當前工作目錄。
文件描述符是內核為了高效管理已經被打開的文件所創建的索引,
進程通過文件描述符來訪問文件。 在程序剛啟動的時候默認有3個文件描述符:0(標准輸入),1(標准輸出),2(標准錯誤),系統默認提供了 0~2的文件描述符,之後的 當我們進行 open,create等操作的時候 自動添加進表
所以int creat(const char * ,mode_t)返回的文件int 就是你所進行操作的文件的唯一身份標示,
然後你只要拿著這個ID 然後告訴系統給我找xx, write(int fd,char *buf,int lenght) 通過fd得到准確文件 然後寫入。
當我們新建creat,打開open 之後,得到的fd 是從3開始的 因為前面的三個被系統佔了在OS X系統下測試 文件描述符表 自增,當釋放close之後,fd變成-1,如果再繼續新建 則填補之前的空缺。
返回當前工作目錄。
把字元串類型的文件名翻譯成bytes類型的文件名;os.fsdecode()實現相反的功能。
返迴路徑的文件系統表示。
如果環境變數中存在key,返回環境變數key的值,否則返回default的值。
設置環境變數key的值為value。
使用當前uid/gid檢測對路徑path是否有訪問許可權。其中,path為要檢測是否有許可權的路徑,mode為許可權類別,值可以為os.F_OK、os.R_OK、os.W_OK、os.X_OK中的一個或多個;
切換當前的工作路徑為path指定的路徑。
設置路徑path的標記為flags,flags為數字標記,多個flags可以使用or組合。flags可以為以下值或以下值的組合:
更改文件或目錄的許可權。
path -- 文件名路徑或目錄路徑
mode -- 可用以下選項按位或操作生成, 目錄的讀許可權表示可以獲取目錄里文件名列表, 寫許可權表示可以獲取文件並且可以修改內容,執行許可權表示可以把工作目錄切換到此目錄 ,刪除添加目錄里的文件必須同時有寫和執行許可權 ,文件許可權以用戶id->組id->其它順序檢驗,最先匹配的允許或禁止許可權被應用。
更改路徑的擁有者和group id為uid和gid。如果不修改可以設置為-1,並且需要超級用戶許可權來執行許可權修改操作。
path -- 設置許可權的文件路徑
uid -- 所屬用戶ID
gid -- 所屬用戶組ID
更改當前進程的根目錄為path。
返回當前工作目錄。
返回path目錄路徑下的文件列表,列表沒有固定的順序。
創建目錄path。如果目錄已經存在,會拋出異常FileExistsError。
遞歸的目錄創建,遞歸的意思是創建所有到達葉子目錄的中間目錄。
從原始設備號(通常是stat中的st_dev或st_rdev)中提取設備major號碼。
從原始設備號(通常是stat中的st_dev或st_rdev)中提取設備minor號碼。
根據設備的major號碼和minor號碼組成原始設備號。
刪除文件路徑path。如果path指向的是目錄路徑,會拋出異常IsADirectoryError。如果要刪除目錄,使用rmdir。
遞歸的刪除目錄。與rmdir功能相似,不同的是,如果葉子目錄被刪除之後,removedirs會連續的刪除每一層上級目錄,直到拋出異常(異常會被忽略,因為異常通常意味著上層目錄為非空目錄)。
重命名文件或路徑src為dst,如果dst已經存在,會拋出異常。
遞歸的重命名文件或目錄。功能與rename類似,不同在於,renames首先創建new路徑(即重命名之後的路徑)的中間路徑,然後創建完整new路徑,最後,會使用removedirs刪除掉old路徑(實際上刪除的是old路徑與new路徑不重合的部分)。
重命名文件或路徑src為dst。如果dst是目錄,拋出異常OSError。如果dst是文件且已經存在,且用戶具有許可權,dst會被替換掉。
刪除path目錄。如果path不存在,或者path非空,會拋出異常FileNotFoundError或OSError。如果要刪除整個目錄樹,可以使用shutil.rmtree()。
返回path的絕對路徑,效果等同於使用normpath:normpath(join(os.getcwd(), path))。
返迴路徑path的文件名,也就是對path調用os.path.split函數返回的元組的第二個元素。
paths為一個序列類型,其中每個元素表示一個路徑,函數返回結果為每個元素所表示的路徑的最長公共子路徑。如果paths為空,或者paths同時包含絕對路徑和相對路徑,或者paths同時包含不同驅動類型的路徑(比如Linux系統的路徑和Windows系統的路徑),則拋出異常ValueError。
list中的每個元素表示一個路徑,函數返回每個路徑的最長的共有路徑前綴,因為計算方式為逐個字元進行比較,所以可能返回的結果並非有效的路徑,如果要返回有效路徑,可以使用commonpath。
返回path路徑的目錄部分,也就是對path調用os.path.split函數返回的元組的第一個元素。
如果path指向的路徑已存在,則返回True,否則返回False。
在Unix和Windows系統中,返回path路徑中的~被替換成用戶的home目錄之後的結果。
path路徑中的 {name}被環境變數中對應名稱的值替代。
返回最後一次訪問path的時間,返回值的格式為一個float類型的數值,表示距離epoch基準時間1970-01-01 00:00:00的秒數。如果path表示的路徑不存在或者沒有許可權,拋出異常OSError。
返回最後一次修改path的時間,返回值的格式為一個float類型的數值,表示距離epoch基準時間1970-01-01 00:00:00的秒數。如果path表示的路徑不存在或者沒有許可權,拋出異常OSError。
返回path表示的文件或路徑的大小,以byte位元組為單位。如果path表示的路徑不存在或者沒有許可權,拋出異常OSError。
如果path是絕對路徑,返回True,否則返回False。
如果path表示的是已存在的文件路徑,返回True。
如果path表示的是已存在的目錄,返回True。
如果path表示的是鏈接,返回True。
判斷path是否為掛載點。
連接一個或多個路徑,path和多個*paths的連接會使用路徑分隔符。
對path的字母大小寫進行normalize。在Windows系統中,path中的所有字母都轉成小寫,並且把正斜杠轉成反斜杠。在其他操作系統中,返回path本身。
對path進行normalize,刪除多餘的路徑分隔符。
split the path into a pair (head, tail),其中tail是path中最後的部分,並且永遠不會含有斜杠,head是除了tail之外的部分。如果path以斜杠結尾,tail為空;如果path中不包含斜杠,head為空;如果path為空,head和tail都是空。
D. python刪除文件以後,提示需要administrator許可權
修改這個文件許可權: 右鍵訪問文件……屬性……安全……高級……所有者:system 更改C(點更版改C)……高級……立即查權找……在搜索結果(U)選框,點一下自己安裝系統時給電腦起的名字,也就是一個小人頭……確定……確定……在替換子容器和對象所有者前面打挑……應用……是……一路點擊確定,然後刪除。
E. python--目錄操作
一、os.getcwd()
獲取當前工作目錄,即當前Python腳本工作的目錄路徑。
二、os. chdir(path)
改變當前腳本工作目錄;相當於shell下的cd命令。
三、os.pardir
返回當前目錄的父目錄('..')
四、獲取當前使用的操作系統類型(其中 『nt』 是 windows,』posix』 是linux 或者 unix)。
五、os.mkdir(path [, mode=0777])
生成單級目錄;相當於linux中的mkdir dirname。參數mode表示生成的目錄的許可權,默認是超級許可權,也就是0777。如果重復創建,會報錯
六、os.makedirs(path [, mode=0777])
可生成多層遞歸目錄,父目錄如果不存在,遞歸生成。參數mode表示生成的目錄的許可權,默認是超級許可權,也就是0777。
七、os.removedirs(path)
若目錄為空,則刪除,並遞歸到上一級目錄,如若也為空,則刪除,依次類推。
八、os.rmdir(path)
刪除單級空目錄,若目錄不為空則無法刪除,會報錯;相當Linux中的rmdir dirname。
九、os.listdir(path)
列出指定目錄下的所有文件和子目錄,包括隱藏文件或目錄,並以列表形式返回。
十、os.remove(filePath)
刪除一個指定的文件,參數filePath表示文件所在的路徑。
注意:該方法只能刪除文件,不能刪除目錄。
十一、os.rename(oldname, newname)
重命名文件/目錄。
十二、os.access(path, mode)
輸出文件許可權模式。
十三、os.chmod(path, mode)
修改文件的許可權。
十四、os.walk(top, topdown=True, onerror=None, followlinks=False)
➢top:表示需要遍歷的目錄樹的路徑。
➢topdown的默認值是「True」,表示首先返回目錄樹下的文件,然後遍歷目錄樹下的子目錄。值設為False時,則表示先遍歷目錄樹下的子目錄,返回子目錄下的文件,最後返回根目錄下的文件。
➢onerror的默認值是「None」,表示忽略文件遍歷時產生的錯誤。如果不為空,則提供一個自定義函數提示錯誤信息後繼續遍歷或拋出異常中止遍歷。
➢該函數返回一個列表,列表中的每一個元素都是一個元組,該元組有3個元素,分別表示每次遍歷的路徑名,目錄列表和文件列表。
➢默認情況下,os.walk 不會遍歷軟鏈接指向的子目錄,若有需要請將followlinks設定為true
十五、os.path.split(path)
將path分割成目錄和文件名(事實上,如果你完全使用目錄,它也會將最後一個目錄作為文件名而分離,同時它不會判斷文件或目錄是否存在),並存於元組中返回。
十六、os.path.exists(path)
判斷path是否存在,如果存在返回True,否則返回False。
十七、os.path.isfile(path)
判斷path是否是文件,如果是返回True,否則返回False。
十八、os.path.isdir(path)
判斷path是否是目錄,如果是目錄返回True,否則返回False。
十九、os.path.getsize(name)
獲得文件大小,如果name是目錄返回結果是0L或者4096L;如果name代表的目錄或文件不存在,則會報WindowsError異常。
二十、os.path.join(a, *p)
連接兩個或更多的路徑名,中間以「\」分隔,如果所給的參數中都是絕對路徑名,那先給的絕對路徑將會被丟棄。
二十一、os.path.getatime(filename)
返迴文件的最後訪問時間,返回的是時間戳。
二十二、os.path.getctime(filename)
以時間戳的形式返迴文件或目錄的創建時間,在Unix系統上是文件最近更改的時間,在Windows上是文件或目錄的創建時間。
1.基礎題:
檢驗給出的路徑是否是一個文件:os.path.isfile("D:\\test.txt")
檢驗給出的路徑是否是一個目錄:os.path.isdir("D:\\test.txt")
判斷是否是絕對路徑:os.path.isabs("D:\\test.txt")
檢驗給出的路徑是否真地存在:
2.返回一個路徑的目錄名和文件名 :os.listdir("D:\\")
3.分離文件名與擴展名 :os.path.splitext("D:\\test.txt")
4.找出某個目錄下所有的文件,並在每個文件中寫入「gloryroad」 :
>>> for files in os.walk("D:\\test"):
... print(files)
...
('D:\\test', [], ['a.txt', 'b.txt', 'test.txt', 'test1.txt'])
>>> with open("D:\\test\\a.txt","w+") as f:
... f.write("gloryroad")
5.如果某個目錄下文件名包含txt後綴名,則把文件後面追加寫一行「被我找到了!」
6. 命題練習:
1) 一個目錄下只有文件(自己構造),拷貝幾個文件(手工完成)
2 )用listdir函數獲取所有文件,如果文件的創建時間是今天,那麼就在文件裡面寫上文件的路徑、文件名和文件擴展名
3) 如果不是今天創建(獲取文件的創建時間,並轉化為時間格式,判斷是否今天),請刪除
4 )計算一下這個程序的執行耗時
7.刪除某個目錄下的全部文件
8.統計某個目錄下文件數和目錄個數
9.使用程序建立一個多級的目錄,在每個目錄下,新建一個和目錄名字一樣的txt文件
10. 查找某個目錄下是否存在某個文件名
11. 用系統命令拷貝文件
12.輸入源文件所在路徑和目標目錄路徑,然後實現文件拷貝功能
13.遍歷某個目錄下的所有圖片,並在圖片名稱後面增加
14、遍歷指定目錄下的所有文件,找出其中佔用空間最大的前3個文件
15、過濾py源碼中的#注釋,另存為文件result.py,並執行result.py,斷言是否執行成功
16、文件訪問,提示輸入數字 N 和文件 F, 然後顯示文件 F 的前 N 行.
17、從命令行接受1個路徑如:c:\a\b\c\1.py, 實現1個函數創建目錄a\b\c,創建文件1.py,實現1個函數刪除已創建的目錄及文件
18、有一個ip.txt,裡面每行是一個ip,實現一個函數,ping 每個ip的結果,把結果記錄存到ping.txt中,格式為ip:0或ip:1 ,0代表ping成功,1代表ping失敗
19、實現DOS命令執行功能,接受輸入命令並執行,然後把執行結果和返回碼列印到屏幕
20、文件訪問
訪問一存在多行的文件,實現每隔一秒逐行顯示文本內容的程序,每次顯示文本文件的 5行, 暫停並向用戶提示「輸入任意字元繼續」,按回車鍵後繼續執行,直到文件末尾。
顯示文件的格式為:[當前時間] 一行內容,比如:[2016-07-08 22:21:51] 999370this is test
F. Mac在命令行模式下打開.py文件的正確步驟
Mac在終端的命令行模式下如果敲一個命令python hello.py,看到如下錯誤:
-bash: hello: command not found
解決方案(在命令行模式下打開.py文件的正確步驟)如下:
1. 將文件直接拖入終端窗口中,可以看到.py文件所在的位置
2. (找不到文件的正確目錄時)
cd空格文件所在位置,即可將當前目錄切換到.py文件所在的目錄下
例如: cd /Users/tanxl/Desktop
3. (出現Permission denied,表明沒有許可權時,a+x為所有用戶增加執行許可權)
chmod 空格a+x空格文件名 即可修改目錄的許可權
例如: chmod a+x hello.py
4. 直接打開文件,輸入python3空格文件名
python3 hello.py