[英]How can I test if a string refers to a file or directory? with regular expressions? in python?
所以我正在編寫一個帶有os
模塊和pickle
的通用備份應用程序,到目前為止我已經嘗試了下面的代碼來查看某個東西是文件還是目錄(基於它的字符串輸入而不是它的物理內容)。
import os, re
def test(path):
prog = re.compile("^[-\w,\s]+.[A-Za-z]{3}$")
result = prog.match(path)
if os.path.isfile(path) or result:
print "is file"
elif os.path.isdir(path):
print "is directory"
else: print "I dont know"
問題
test("C:/treeOfFunFiles/")
is directory
test("/beach.jpg")
I dont know
test("beach.jpg")
I dont know
test("/directory/")
I dont know
期望的輸出
test("C:/treeOfFunFiles/")
is directory
test("/beach.jpg")
is file
test("beach.jpg")
is file
test("/directory/")
is directory
資源
我應該使用什么正則表達式來區分什么是file
,什么是directory
? 還是有不同的方法來解決這個問題?
os
模塊提供了檢查路徑是文件還是目錄的方法。 建議在正則表達式上使用此模塊。
>>> import os
>>> print os.path.isfile(r'/Users')
False
>>> print os.path.isdir(r'/Users')
True
這可能對某人有幫助,我有完全相同的需求,我使用以下正則表達式來測試輸入字符串是目錄、文件還是兩者都不是:對於通用文件:
^(\/+\w{0,}){0,}\.\w{1,}$
對於通用目錄:
^(\/+\w{0,}){0,}$
所以生成的 python 函數如下所示:
import os, re
def check_input(path):
check_file = re.compile("^(\/+\w{0,}){0,}\.\w{1,}$")
check_directory = re.compile("^(\/+\w{0,}){0,}$")
if check_file.match(path):
print("It is a file.")
elif check_directory.match(path):
print("It is a directory")
else:
print("It is neither")
例子:
這層輸入的安全性稍后可能會通過 os.path.isfile() 和 os.path.isdir() 內置函數得到加強,正如 Squig 先生親切地展示的那樣,但我敢打賭這個初步測試可以為您節省一些微秒並提高腳本性能。
PS:在使用這段代碼時,我注意到我錯過了一個巨大的用例,因為路徑實際上包含特殊字符,例如廣泛使用的破折號“-”。 為了解決這個問題,我更改了 \w{0,} 指定僅字母單詞的要求。{0,} 這只是一個隨機字符。 這更像是一種解決方法而不是解決方案。 但這就是我現在所擁有的。
在字符類中,如果存在並表示為連字符,則-
需要是第一個/最后一個字符,或者轉義\-
因此更改"^[\w-,\s]+\.[A-Za-z]{3}$"
到"^[-\w,\s]+\.[A-Za-z]{3}$"
例如。
否則,我認為使用正則表達式來確定某些東西是否看起來像文件名/目錄是毫無意義的......
/dev/fd0
不是文件或目錄~/comm.pipe
可能看起來像一個文件,但實際上是一個命名管道~/images/test
是指向名為“~/images/holiday/photo1.jpg”的文件的符號鏈接查看os.path
模塊,它具有詢問操作系統什么是什么的功能......:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.