Lua從檔案路徑獲取資訊及萬用字元解釋

2021-06-27 02:57:41 字數 3435 閱讀 1829

lua檔案從路徑中中獲取:

檔名(無字尾)、檔名(帶字尾)、檔案所在目錄、檔案去字尾路徑、檔案字尾

首先先來獲得,lua檔案所在路徑開始吧:

obj = io.popen("cd") 			--如果不在互動模式下,前面可以新增local

path = obj:read("*all"):sub(1,-2) --path存放當前路徑(是為了去掉換行符)

obj:close() --關掉控制代碼

print(path)

原理: 利用windows的 cd 命令返回工作目錄

如果安裝了luaforwindows,會有個lfs.dll,你可以這樣使用:

require("lfs")

path = lfs.currentdir()

print(path)

下面說說如何從 乙個全路徑中獲取 檔案的:

檔名(無字尾)、檔名(帶字尾)、檔案所在目錄、檔案去字尾路徑、檔案字尾

--獲取路徑

function stripfilename(filename)

if string.find(filename,":") then

return string.match(filename, "(.+)\\[^\\]*%.%w+") -- windows

else

return string.match(filename, "(.+)/[^/]*%.%w+$") -- *nix system

endend--獲取帶字尾檔名

function strippath(filename)

if string.find(filename,":") then

return string.match(filename, ".+\\([^\\]*%.%w+)") -- windows

else

return string.match(filename, ".+/([^/]*%.%w+)$") -- *nix system

endend--獲取去字尾檔名

function strippathex(filename)

if string.find(filename,":") then

return string.match(filename, ".+\\([^\\]*)%.%w+") -- windows

else

return string.match(filename, ".+/([^/]*%.%w+)$") -- *nix system

endend--去除副檔名

function stripextension(filename)

local idx = filename:match(".+()%.%w+$")

if(idx) then

return filename:sub(1, idx-1)

else

return filename

endend--獲取副檔名

function getextension(filename)

return filename:match(".+%.(%w+)$")

end

來個例子試試:

--paths = "/use/local/openresty/nginx/movies/fffff.tar.gz"

paths = "c:\\users\\zhuzhuxia\\desktop\\luac\\zhuzhu.test"

print (strippath(paths))

print (strippathex(paths))

print (stripfilename(paths))

print (stripextension(paths))

print (getextension(paths))

可以改變paths 值看看啊,第一種情況是在linux系統下,第二種是在windows系統下的。

這裡稍微講講萬用字元吧:詳情可以看看:

例如:

--獲取去字尾檔名

function strippathex(filename)

if string.find(filename,":") then

return string.match(filename, ".+\\([^\\]*)%.%w+") -- windows

else

return string.match(filename, ".+/([^/]*%.%w+)$") -- *nix system

endend--return string.match(filename, ".+\\([^\\]*%.%w+)")

這裡萬用字元是這樣的:

.+\\([^\\]*)%.%w+

我們先把所有萬用字元看看:

.(點): 與任何字元配對

%a: 與任何字母配對

%c: 與任何控制符配對(例如\n)

%d: 與任何數字配對

%l: 與任何小寫字母配對

%p: 與任何標點(punctuation)配對

%s: 與空白字元配對

%u: 與任何大寫字母配對

%w: 與任何字母/數字配對

%x: 與任何十六進製制數配對

%z: 與任何代表0的字元配對

%x(此處x是非字母非數字字元): 與字元x配對. 主要用來處理表示式中有功能的字元(^$()%.*+-?)的配對問題, 例如%%與%配對

[數個字元類]: 與任何中包含的字元類配對. 例如[%w_]與任何字母/數字, 或下劃線符號(_)配對

[^數個字元類]: 與任何

不包含在中的字元類配對. 例如[^%s]與任何非空白字元配對

+      匹配前一字元1次或多次,匹配乙個或多個字元,總是進行最長的匹配。

*      匹配前一字元0次或多次,與 '+' 類似,但是他匹配乙個字元0次或多次出現

-      匹配前一字元0次或多次,進行的是最短匹配

?      匹配前一字元0次或1次,匹配乙個字元0次或1次

在來看.+\\([^\\]*)%.%w+:

.+ 多個任意字元

\\ 乙個: \

([^\\]*) ()內的內容會返回,裡邊[^\\]*的意思:非'\'字元任意個('*'是任意個前一字元)

%. 乙個小數點

%w+ 多個字母/數字

總結起來:...\(檔名,不含'\').檔案字尾

eg: 

string.match("c:\temp\我是檔案.exp", ".+\\([^\\]*%.%w+)")

-->  c:\temp\(我是檔案).exp

--> 我是檔案

其他幾個的萬用字元,可以自己試著理解下啊!

定時從linux獲取資訊放到windows上

環境 windows上 路徑下存放 winscp 5.13.8 setup.exe 第一步 test.txt 拉取指令碼的txt文字 解析 存放從linux路徑下拉取所需原始檔zyy count.result 到本地windows的目標路勁改下 d zyy xnresult option echo ...

記錄安卓手機 劉海屏判斷及獲取資訊

object notchsupportutil catch e classnotfoundexception catch e nosuchmethodexception catch e exception finally 獲取劉海尺寸 width height int 0 值為劉海寬度 int 1 ...

從Request物件中獲取各種路徑資訊

從request物件中可以獲取各種路徑資訊,以下例子 假設請求的頁面是index.jsp,專案是webdemo,則在index.jsp中獲取有關request物件的各種路徑資訊如下 string path request.getcontextpath string basepath request....