簡體   English   中英

在python中使用變量作為新文件名的一部分

[英]Using variable as part of name of new file in python

我是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/data/something.fasta_chromosome.fasta

如果在file使用os.path.basename ,您將獲得該文件的名稱(即在我的示例中, something.fasta

來自@Adam Smith

您可以使用os.path.splitext來刪除.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)

通常,人們會來找我並說“ 那是丑陋的 ”。 並不是的 :)。 縮進的級別清楚地表明了什么是上下文。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM