在 jupyter notebook 中,我可以运行以下命令并获取我可以打开的文件对象列表:
PATH = someuser/data
files = get_ipython().getoutput('ls {PATH}') #%ls {PATH} in notebook
#then I can run
text = get_ipython().getoutput('less {PATH}{files[0]}')
print(text)
我尝试了以下方法:
path = f"{PATH}"
files = subprocess.call(['ls', path])
files = subprocess.run(['ls', path], stdout=subprocess.PIPE).stdout.decode('utf-8')
files = os.system(path)
但我只能得到一个字符串对象而不是我可以打开并从中获取数据的文件对象。
最佳答案
文件名是 字符串。这就是您传递给 open
以获取文件对象的内容,然后您可以从中获取数据。例如,假设您有一个名为 spam.py
的脚本:
filename = 'spam.py'
with open(filename) as fileobj:
data = fileobj.read()
print(data)
当你运行它时,它会自己打印出来。
现在,您在 ls
上调用 subprocess.run
并读取其 stdout
得到的输出不是每个文件的字符串,但是一根大绳子。
这里的简单答案是不要调用 ls
。 Python 已经可以为您获取文件名列表:
filenames = os.listdir(path)
for filename in filenames:
with open(filename) as fileobj:
# do stuff with fileobj
但是如果你真的需要,你可以使用,例如,splitlines
方法将你的输出变成一个行列表,这与 listdir
返回,只是以更复杂的方式检索。
关于python - 从 python 运行 bash 命令并捕获文件对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49311270/