3 回答
TA贡献2012条经验 获得超12个赞
如果您坚持使用子流程,请尝试:
[x.split(' ')[-1] for x in stdout.decode().split('\n')[1:-1]]
显然,这是一种非常“hacky”的方式。相反,我可以建议标准库glob
import glob
glob.glob(source + '/*')
返回源中所有文件/目录名称的列表。
编辑:
cmd = ["ls", source]
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE)
stdout, stderr = proc.communicate()
exitcode = proc.returncode
stdout.decode("utf-8").split('\n')[:-1]
也应该这样做。-l这里不需要选项。
TA贡献1810条经验 获得超4个赞
由于几个原因,解析 的输出ls是一个坏主意。如果您的文件名有尾随空格,ls则将其显示为'trailing space ',如果您尝试将open("'trailing space '")其显示为无效。文件名也可以包含换行符。
使用pathlib来代替:
from pathlib import Path
source = Path("/path/to/some/directory")
[x.name for x in source.iterdir()]
# ['a_file', 'some_other_file.txt', 'a_directory']
TA贡献1863条经验 获得超2个赞
正如查尔斯·达菲 (Charles Duffy) 所提到的,您可以使用 os. 像这样。
import os
directory=#wherever you want to search
files_and_directories=os.listdir(directory)
Out: ['Directories and file names in a list']
添加回答
举报