gpt4 book ai didi

linux - 在 Python 中,在 Linux 上列出目录中的某种类型的文件

转载 作者:可可西里 更新时间:2023-11-01 11:49:20 25 4
gpt4 key购买 nike

在我的目录中,有一种以.log 结尾的文件类型。通常,我使用 ls .*log 命令列出所有文件。

但是,我想使用 Python 代码来处理它。我试过两种方法。

首先:

import subprocess

ls_al = subprocess.check_output(['ls','.*log'])

但它返回 ls: .*log: No such file or directory

第二个:

import subprocess

ls_al = subprocess.check_Popen(['ls','.*log'],stdout=subprocess.PIPE)

ls = ls_al.stdout.read().strip()

但是那两个没有用。

有人可以帮忙吗?

最佳答案

Globbing 模式由shell 扩展,但您直接 运行命令。您必须通过 shell 运行命令:

ls_al = subprocess.check_output('ls *.log', shell=True)

将完整的命令行作为字符串传递给 shell(并使用正确的 glob 语法)。

演示(使用*.py):

>>> subprocess.check_output(['ls', '*.py'])
ls: *.py: No such file or directory
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/mj/Development/Library/buildout.python/parts/opt/lib/python2.7/subprocess.py", line 575, in check_output
raise CalledProcessError(retcode, cmd, output=output)
subprocess.CalledProcessError: Command '['ls', '*.py']' returned non-zero exit status 1
>>> subprocess.check_output('ls *.py', shell=True)
'calc.py\ndAll.py\nexample.py\ninplace.py\nmyTests.py\ntest.py\n'

请注意,在 Python 中 的正确方法是使用 os.listdir() 进行手动过滤,使用 fnmatch 模块进行过滤,或者使用 glob module一起列出和过滤:

>>> import glob
>>> glob.glob('*.py')
['calc.py', 'dAll.py', 'example.py', 'inplace.py', 'myTests.py', 'test.py']

关于linux - 在 Python 中,在 Linux 上列出目录中的某种类型的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20857987/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com