1

在 Linux 上的 Python 中,我需要区分本地文件系统路径 à la/mnt/data/wherever/%Y-%m-%d.txt~/data/bla.txt一方面,以及 SSH“路径”à lauser@host1:/data/bla.txtuser@host2.mydomain.com:blupp.txt.

我怎样才能有效地做到这一点?

编辑:在我的示例中,没有 file /mnt/data/wherever/%Y-%m-%d.txt,因为%Yetc 只是占位符。因此,检查具有给定名称的文件/目录是否存在将不起作用。

4

2 回答 2

2

唯一知道的方法是使用启发式方法,因为 ssh 路径也是有效的文件名(尽管非常奇怪)。

从 scp 文档:

文件名可以包含用户和主机规范,以指示文件将被复制到该主机/从该主机复制。本地文件名可以使用绝对或相对路径名明确,以避免 scp 将包含 ':' 的文件名视为主机说明符。

因此,请检查它们是否以显式路径开头,或者在正确的位置没有冒号。然后假设它是本地路径,否则假设它是远程路径。

例子:

pattern = '(\.?/|/)|(^:?[^:]*$)'
re.match(pattern, ":home/test") # match, is a local path
re.match(pattern, "user@host:blah") # no match
于 2013-03-15T10:34:58.307 回答
0

你可以这样做——

  1. 首先在本地文件系统中检查路径 X (这说明了 - 之类的路径user@host1:/data/bla.txt)。
  2. 如果本地文件系统中不存在路径 X,则检查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做。要检查路径是否是本地文件系统中的现有文件,请使用:

于 2013-03-15T10:28:04.557 回答