我正在尝试使用 python 获取目录中的 CSV 文件列表。这在 unix 中非常简单:
ls -l *.csv
Run Code Online (Sandbox Code Playgroud)
而且,可以预见的是,我在我的目录中得到了以 .csv 结尾的文件列表。但是,当我使用 Subprocess 模块尝试 Python 等效项时:
>>> import subprocess as sp
>>> sp.Popen(["ls", "-l", "*.csv"], stdout = sp.PIPE)
<subprocess.Popen object at 0xb780e90c>
>>> ls: cannot access *.csv: No such file or directory
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下这是怎么回事吗?
编辑:添加shell = True删除了错误,但不是只获取 CSV 文件的列表,而是获取目录中所有文件的列表。
如果您希望它的行为与在 shell 中一样,则需要通过shell=True(此处的情况可能会有所不同,具体取决于您的系统和 shell)。在您的情况下,问题是当您这样做时ls -l *.csv,外壳正在评估 * 的含义,而不是ls。(ls只是格式化您的结果,但 shell 已经完成了确定哪些文件匹配的繁重工作*.csv)。Subprocess 从字面上进行ls处理*.csv,并查找具有该特定名称的文件,当然没有任何文件(因为这是一个很难创建的文件名)。
您真正应该做的是os.listdir自己使用和过滤名称。