gpt4 book ai didi

python - 在 python 中使用变量作为新文件名称的一部分

转载 作者:行者123 更新时间:2023-11-30 22:50:05 24 4
gpt4 key购买 nike

我对 python 相当陌生,我的 python 脚本 (split_fasta.py) 遇到了问题。这是我的问题的示例:

list = ["1.fasta", "2.fasta", "3.fasta"]
for file in list:
contents = open(file, "r")
for line in contents:
if line[0] == ">":
new_file = open(file + "_chromosome.fasta", "w")
new_file.write(line)

我省略了程序的底部部分,因为不需要它。我的问题是,当我在与 fasta123 文件相同的目录中运行该程序时,它工作得很好:

python split_fasta.py *.fasta

但是如果我在不同的目录中并且我希望程序将新文件(例如 1.fasta_chromsome.fasta)输出到我当前的目录...它不会:

python /home/bin/split_fasta.py /home/data/*.fasta

这仍然会在与 fasta 文件相同的目录中创建新文件。我确定这里的问题出在这一行:

new_file = open(file + "_chromosome.fasta", "w")

因为如果我将其更改为:

new_file = open("seq" + "_chromosome.fasta", "w")

它在我的当前目录中创建一个输出文件。

我希望这对你们中的一些人有意义,并且我可以获得一些建议。

最佳答案

您将提供旧文件的完整路径以及新名称。所以基本上,如果file ==/home/data/something.fasta,输出文件将是file + "_chromosome.fasta",即/home/数据/something.fasta_chromosome.fasta

如果您在file上使用os.path.basename,您将获得文件的名称(即在我的示例中,something.fasta)

来自@Adam Smith

You can use os.path.splitext to get rid of the .fasta

basename, _ = os.path.splitext(os.path.basename(file))
<小时/>

回到代码示例,我看到了很多Python不推荐的东西。我会详细介绍。

避免隐藏内置名称,例如 liststrint...它不明确,可能会导致以后出现潜在问题.

打开文件进行读取或写入时,应使用 with 语法。强烈建议这样做,因为它会小心地关闭文件。

with open(filename, "r") as f:
data = f.read()
with open(new_filename, "w") as f:
f.write(data)

如果文件中有空行,line[0] == ... 将导致 IndexError 异常。请改用 line.startswith(...)

最终代码:

files = ["1.fasta", "2.fasta", "3.fasta"]
for file in files:
with open(file, "r") as input:
for line in input:
if line.startswith(">"):
new_name = os.path.splitext(os.path.basename(file)) + "_chromosome.fasta"
with open(new_name, "w") as output:
output.write(line)

人们常常对我说“太棒了”。并不真地 :)。缩进级别明确了上下文是什么。

关于python - 在 python 中使用变量作为新文件名称的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39519599/

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