linux下找到所有python文件,关于linux:让Python脚本在单独的目录中找到文件

我对Python编程非常陌生,我编写了一个脚本,通过sftp自动将文件上传到远程机器上。剧本的效果很好,但有一个问题我似乎想不出来。如果我在我要上传的文件所在的目录中,一切都会好起来。但是,当我键入不在该目录中的文件名时,它不喜欢这样。每次浏览不同的文件夹都很麻烦。我知道我可以把文件合并到一个文件夹中…但我很想尝试将其自动化。

/Downloads目录是硬编码的,因为这是大多数工具所在的位置,有人知道我如何调整这行代码来获取匹配的文件名,而不管文件所在的目录是什么?

这就是我写的:

#! /usr/bin/python2

# includes

import thirdpartylib

import sys

if len(sys.argv) != 6:

print"Usage: %s file url port username password" % sys.argv[0]

exit(0)

file = sys.argv[1]

host = sys.argv[2]

port = int(sys.argv[3])

username = sys.argv[4]

password = sys.argv[5]

filelocation ="Downloads/%s" % file

transport = thirdpartylib.Transport((host, port))

transport.connect(username=username, password=password)

sftp = thirdpartylib.SFTPClient.from_transport(transport)

sftp.put(file, filelocation)

sftp.close()

transport.close()

我认为您希望将filelocation作为stfp.put的第一个参数,因为它应该是本地计算机上的文件名。另外,你可能想在Downloads前面划一条斜线。

首先,如果要对文件路径进行任何操作,建议您使用一些内置功能来构造它们,以确保具有适当的文件分隔符等。os.path.join非常适合这样做。

也就是说,我建议让用户在文件路径中作为绝对路径(在这种情况下,它可以位于计算机上的任何位置)或相对路径(在这种情况下,它是相对于当前目录的)。我不会将Downloads/附加到所有文件路径中,因为这明显会破坏任何绝对路径,并且需要调用程序的个人了解其内部。我认为这个文件路径相当于一个幻数。

所以,归根结底,将filelocation改为文件输入参数本身。

filelocation = sys.argv[1]

# You can even do some validation if you want

is not os.path.isfile(filelocation):

print"File '%s' does not exist!" % filelocation

如果您真的希望Downloads/文件夹是默认文件夹(如果文件路径不是绝对路径),您可以检查输入是否是绝对路径(使用os.path.isabs),如果不是,则指定它在Downloads/目录中。

if not os.path.isabs(filelocation):

filelocation = os.path.join('Downloads', filelocation)

然后用户可以通过两种方式调用脚本:

# Loads file in /absolute/path/to/file

./script.py /absolute/path/to/file ...

# Loads filename.txt from Downloads/filename.txt

./script.py filename.txt ...

另外,看起来您的sftp.put输入参数可能颠倒了。本地文件名应该在第一位。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值