如何从脚本中使用 linux 命令 "cat"?
How to use linux command "cat" from a script?
输入:A.fasta
>A
sldkfjslkdcskd
输入:B.fasta
>B
pofnvkweu
预期output:A_B.fasta
>A
sldkfjslkdcskd
>B
pofnvkweu
代码:
my_model_dir_path='../my_model'
word='.fasta'
for f in os.listdir(my_model_dir_path):
if word in f:
subprocess.call(["cat", f"{f}"])
错误信息:
No such file or directory
我使用子进程调用 linux 命令 cat
以类似预期输出的 fasta 格式连接 fasta 文件。但是,即使文件和目录存在于正确的路径中,我也会收到类似 No such file or directory
的消息。
我看到了这个post:https://www.delftstack.com/howto/python/python-cat/
import os
os.system("echo 'Hello! Python is the best programming language.' >> ~/file.txt")
os.system("cat ~/file.txt")
输出:
你好! Python 是最好的编程语言。
我不确定您为什么要执行一个新命令 (cat) 来执行此操作,而您可以使用 Python 的 built-in 文件操作来执行此操作。
Append a text to file in Python
os.listdir
returns 相对于给定目录的路径。
因此,您尝试在 ./A.fasta
而不是 ../my_model/A.fasta
.
处抓取文件
试试这个:
for f in os.listdir(my_model_dir_path):
if word in f:
subprocess.call(["cat", f"{my_model_dir_path}/{f}"])
如果您使用 python3,pathlib 很有用。
from pathlib import Path
for f in Path(my_model_dir_path).glob("*.fasta"):
subprocess.call(["cat", f"{f}"])
似乎文件路径缺少工作目录部分。
同样使用 tail
让事情变得不那么困难
#!/usr/bin/env python3
import os
import subprocess
CWD = os.getcwd()
files = [f for f in os.listdir(CWD) if str(f).endswith(".fasta")]
subprocess.run(["tail", "-n", "+1", *files])
在这种情况下,cat
可能不是最好的工具。
但如果你真的想使用 cat,那么我建议这样做:
for f in files:
file_path = CWD+"/"+f
subprocess.run(["echo", f])
subprocess.run(["cat", file_path])
我可能是错的,但是从 python 调用 bash 并没有多大意义,因为它也可以在 python 内完成。
seq = ""
files = [f for f in os.listdir(CWD) if str(f).endswith(".fasta")]
for f in files:
seq += ">" + f + "\n"
fasta = open(f'{CWD}/{f}', "r")
seq += fasta.read()
fasta.close()
out = open("A_B.fasta", "w")
out.write(seq)
out.close()
输入:A.fasta
>A
sldkfjslkdcskd
输入:B.fasta
>B
pofnvkweu
预期output:A_B.fasta
>A
sldkfjslkdcskd
>B
pofnvkweu
代码:
my_model_dir_path='../my_model'
word='.fasta'
for f in os.listdir(my_model_dir_path):
if word in f:
subprocess.call(["cat", f"{f}"])
错误信息:
No such file or directory
我使用子进程调用 linux 命令 cat
以类似预期输出的 fasta 格式连接 fasta 文件。但是,即使文件和目录存在于正确的路径中,我也会收到类似 No such file or directory
的消息。
我看到了这个post:https://www.delftstack.com/howto/python/python-cat/
import os
os.system("echo 'Hello! Python is the best programming language.' >> ~/file.txt")
os.system("cat ~/file.txt")
输出: 你好! Python 是最好的编程语言。
我不确定您为什么要执行一个新命令 (cat) 来执行此操作,而您可以使用 Python 的 built-in 文件操作来执行此操作。
Append a text to file in Python
os.listdir
returns 相对于给定目录的路径。
因此,您尝试在 ./A.fasta
而不是 ../my_model/A.fasta
.
试试这个:
for f in os.listdir(my_model_dir_path):
if word in f:
subprocess.call(["cat", f"{my_model_dir_path}/{f}"])
如果您使用 python3,pathlib 很有用。
from pathlib import Path
for f in Path(my_model_dir_path).glob("*.fasta"):
subprocess.call(["cat", f"{f}"])
似乎文件路径缺少工作目录部分。
同样使用 tail
让事情变得不那么困难
#!/usr/bin/env python3
import os
import subprocess
CWD = os.getcwd()
files = [f for f in os.listdir(CWD) if str(f).endswith(".fasta")]
subprocess.run(["tail", "-n", "+1", *files])
在这种情况下,cat
可能不是最好的工具。
但如果你真的想使用 cat,那么我建议这样做:
for f in files:
file_path = CWD+"/"+f
subprocess.run(["echo", f])
subprocess.run(["cat", file_path])
我可能是错的,但是从 python 调用 bash 并没有多大意义,因为它也可以在 python 内完成。
seq = ""
files = [f for f in os.listdir(CWD) if str(f).endswith(".fasta")]
for f in files:
seq += ">" + f + "\n"
fasta = open(f'{CWD}/{f}', "r")
seq += fasta.read()
fasta.close()
out = open("A_B.fasta", "w")
out.write(seq)
out.close()