簡體   English   中英

循環通過一對文件 python

[英]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.

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