[英]Loop through pair of files python
我有一個腳本,它接收兩個文件作為輸入並根據行創建一個字典。 最后,它會覆蓋第一個文件。
我正在尋找一種在文件夾的所有文件對上運行此腳本的方法,根據名稱中的模式選擇 sys.argv[1] 和 sys.argv[2]。
import re
import sys
datafile = sys.argv[1]
schemaseqs = sys.argv[2]
datafile_lines = []
d = {}
prev = None
with open(datafile, 'r') as f:
i = 0
for line in f:
if i % 2 == 0:
d[line.strip()]=0
prev = line.strip()
else:
d[prev] = line.strip()
i+=1
new_d = {}
with open(schemaseqs, 'r') as f:
i=0
prev = None
for line in f:
if i % 2 == 0:
new_d[line.strip()]=0
prev = line.strip()
else:
new_d[prev] = line.strip()
i+=1
for key, value in d.items():
if value in new_d:
d[key] = new_d[value]
print(d)
with open(datafile,'w') as filee:
for k,v in d.items():
filee.writelines(k)
filee.writelines('\n')
filee.writelines(v)
filee.writelines('\n')
我有數百個文件對都共享相同的模式 proteinXXXX(其中 XXXX 是一個數字) 這個數字最多可以有四位數字(例如 9,99,999 或 9999)。 所以我有蛋白質 555.txt 和蛋白質 555.fasta
我已經看到我可以使用 glob 或 os.listdir 從目錄中讀取文件。 但是,我不能將它們分配給變量並在目錄的每一對中一次提取一對。
任何幫助表示贊賞。
只是概念。
導入所需的庫。
import glob
import os.path
定義function從文件名中僅提取基本名稱(不帶擴展名的部分)。
def basename(fn):
return os.path.splitext(os.path.basename(fn))[0]
創建兩組,一組帶有.txt
文件,另一組帶有.fasta
文件。
t = {basename(fn) for fn in glob.glob("protein*.txt")}
f = {basename(fn) for fn in glob.glob("protein*.fasta")}
計算這兩組的交集以確保.txt
和.fasta
文件都存在具有相同的基本名稱。 然后添加缺少的后綴並讓它們使用現有代碼進行處理。
for bn in t.intersection(f):
process(bn + ".txt", bn + ".fasta")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.