我需要将在文件夹中创建的最后一个.csv文件的名称作为python脚本的参数传递

时间:2019-05-16 22:54:44

标签: python bash

我需要将我在工作文件夹中创建的最后一个.csv文件的名称传递给csv2sql脚本。

我可以使用这个吗?

ls -t *.csv | head -1

获得输出作为参数?

python csv2sql.py -t products last_created_file.csv > sql.output

如果我尝试:

python csv2sql.py -t products ls -t *.csv | head -1 > sql.output

我明白了:

csv2sql.py: error: argument csvFile: can't open 'ls': [Errno 2] No such file or directory: 'ls'

2 个答案:

答案 0 :(得分:0)

您会收到错误消息,因为bash不会将ls -t *.csv | head -1视为命令,而是将其视为python命令的参数(因此,每个单词都会成为一个参数,例如:args [2]为'ls' ,args [3]将是'-t'等。

要解决此问题,您可以将ls -t *.csv | head -1的输出保存为变量,然后将该变量保存为bash文件并执行,然后将其传递给python命令:

#!/bin/bash
output=$(ls -t *.csv | head -1)
python csv2sql.py -t products $output | head -1 > sql.output

请注意,我目前无法访问我的linux计算机,并且无法测试任何东西,因此我假设ls -t *.csv | head -1命令可以执行您想要的操作。 上面给出的解决方案也不是很整洁,因为它同时使用了bash和python,因此我个人建议研究subsystem module并将其用于全python解决方案。

答案 1 :(得分:0)

这是一个外壳问题。反引号是用于将命令行输出解释为另一个命令行的单个arg的通用语法。对于我认为您正在做的事情,它将显示为:

python csv2sql.py -t products `ls -t *.csv | head -1` > sql.output

这将

  • 执行ls命令
  • 将其放置到head
  • 将单行作为参数返回给python
  • python的标准输出转移到sql.output