[英]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中不推薦的很多東西。 我會詳細介紹。
避免隱藏內置名稱,例如list
, str
, int
......它不是明確的,可能會在以后導致潛在的問題。
打開文件進行讀寫時,應使用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.