2013-08-08 5 views
-1

У меня около 125 файлов в каталоге на моем Linux-машине. У меня есть скрипт annotate.py , который берет в одном файле и добавляет функции в столбец. По сути, я могу поместить имя файла из одного из 125 файлов и запустить скрипт annotate.py, но это не эффективное программирование.автоматическая загрузка файлов каталога в скрипт python

Все 125 файлов имеют схожий формат в терминах имен столбцов и номеров столбцов. Так может кто-нибудь, пожалуйста, скажите мне, как я могу запустить annotate.py на все 125 файлов?

annotate.py объединяет два файла на столбцах хромосомы и позиции. Однако я хотел бы, чтобы input_file1 был всем 125 файлами, читаемыми по одному и объединенными с input_file2. Выходные данные должны быть разные файлы каждый с именем исходного входного файла 1.

#!/usr/bin/python 
#python snp_search.py input_file1 input_file2 
import numpy as np 
import pandas as pd 

snp_f=pd.read_table('input_file1.txt', sep="\t", header=None)#input_file1 
snp_f.columns=['chr','pos'] 
lsnp_f=pd.read_table('input2_snpsearch.txt', sep="\t", header=True)#input_file2 
lsnp_f.columns=['snpid','chr','pos'] 
final_snp=pd.merge(snp_f,lsnp_f, on=['chr','pos']) 
final_snp.to_csv('input_file1_annotated.txt', index=False,sep='\t') 

Пожалуйста, помогите! Спасибо!

ответ

0

Модуль os - ваш друг http://docs.python.org/2/library/os.html. Основная идея: import os и использовать os.listdir(), чтобы получить список файлов в интересующем вас каталоге. Будет работать следующее:

import numpy as np 
import pandas as pd 
import os 


input_file2 = 'input2_snpssearch.txt' 
input_dir = './' #or any other path 
files = os.lisdir(input_dir) #listdir will give the file names 

#you probably don't want to merge your input_file2 with itself and 
#in this case it's in the same directory as the other files so 
#filter it out. 
files_of_interest = (f for f in files if f != input_file2) 

for f in files_of_interest: 
    full_name = os.path.join(input_dir, f) #necessary if input_dir is not './' 
    snp_f=pd.read_table(full_name, sep="\t", header=None)#input_file1 
    snp_f.columns=['chr','pos'] 
    lsnp_f=pd.read_table(input_file2, sep="\t", header=True)#input_file2 
    lsnp_f.columns=['snpid','chr','pos'] 
    final_snp=pd.merge(snp_f,lsnp_f, on=['chr','pos']) 
    new_fname = f.split('.')[0] + '_annotated.txt' 
    final_snp.to_csv(os.path.join(input_dir, new_fname), index=False,sep='\t')