在Linux上的Python中,我需要区分本地文件系统路径,一方面是/mnt/data/wherever/%Y-%m-%d.txt
或~/data/bla.txt
,另一方面是SSH“路径”,user@host1:/data/bla.txt
或{{1} }}
我怎样才能有效地做到这一点?
编辑:在我的示例中,没有文件user@host2.mydomain.com:blupp.txt
,因为/mnt/data/wherever/%Y-%m-%d.txt
等仅仅是占位符。因此,检查具有给定名称的文件/目录是否存在将无效。
答案 0 :(得分:2)
要知道的唯一方法是使用启发式,因为ssh路径也是有效的文件名(虽然非常奇怪)。
来自scp文档:
文件名可能包含用户和主机规范以指明这一点 该文件将被复制到该主机或从该主机复制。可以制作本地文件名 显式使用绝对路径名或相对路径名以避免scp处理文件 包含':'作为主机说明符的名称。
因此,检查它们是否以明确的路径开始,或者在正确的位置没有冒号。然后假设它是本地路径,否则假设它是一条远程路径。
示例:
pattern = '(\.?/|/)|(^:?[^:]*$)'
re.match(pattern, ":home/test") # match, is a local path
re.match(pattern, "user@host:blah") # no match
答案 1 :(得分:0)
你可以这样做 -
user@host1:/data/bla.txt
这样的路径。)SSH
路径Y(附加检查“@”和“:”,否则该文件不存在于任何计算机中)。使用glob根据模式列出文件。
>>> import glob
>>> glob.glob('/mnt/data/wherever/*.txt') # all txt files within the directory will be listed
如果路径是现有常规文件,则 os.path.isfile(path)
返回True
。因此,它用于检查文件是否已存在且不支持通配符。 glob
。
要检查路径是否是本地文件系统中的现有文件,请使用: