2013-06-01 2 views
0

все. У меня есть файл csv, где я установил идентификаторы образцов ДНК, которые я отправил, чтобы их упорядочить в 96-луночном планшете. Это важно отслеживать, потому что, когда мы возвращаем пластину обратно из устройства секвенирования, файлы хроматограммы называются просто, например. 5-3-13-G-Templates_A01_Primer-G.ab1.Итерирование значений из словаря для замены имен файлов в каталоге

CSV-это разделителями табуляции и выглядит следующим образом: (96 лунок, 12 столбцов [1-12], [8 строк AH]):

1 2 3 4 5 6 7 8 9 10 11 12 
A01 A02 A03 A04 A05_Grammatophyllum_scriptum_ITS1 A06_Eulophia_euglossa_ITS1 A07_Grammatophyllum_scriptum_17SE A08_Graphorkis_lurida_X502F A09_Cymbidium_kanran_X502F A10_Claderia_viridiflora_X502F A11_Grammatophyllum_scriptum_X502F A12_Eulophia_euglossa_X502F 
B01 B02 B03 B04 B05_Grammatophyllum_scriptum_ITS4 B06_Eulophia_euglossa_ITS4 B07_Grammatophyllum_scriptum_1229R B08_Graphorkis_lurida_X1599R B09_Cymbidium_kanran_X1599R B10_Claderia_viridiflora_X1599R B11_Grammatophyllum_scriptum_X1599R B12_Eulophia_euglossa_X1599R 
C01 C02 C03 C04 C05_Acriopsis_ridleyi_ITS1 C06_Cyrtopodium_polyphyllum_ITS1 C07_Cyrtopodium_polyphyllum_17SE C08_Graphorkis_scripta_X502F C09_Dipodium_conduplicatum_X502F C10_Dipodium_5431_X502F C11_Cyrtopodium_polyphyllum_X502F C12_Oeceoclades_gracillima_X502F 
D01 D02 D03 D04 D05_Acriopsis_ridleyi_641R D06_Cyrtopodium_polyphyllum_ITS4 D07_Cyrtopodium_polyphyllum_1229R D08_Graphorkis_scripta_X1599R D09_Dipodium_conduplicatum_X1599R D10_Dipodium_5431_X1599R D11_Cyrtopodium_polyphyllum_X1599R D12_Oeceoclades_gracillima_X1599R 
E01 E02 E03 E04_Dipodium_6052_ITS1 E05_Dipodium_5431_ITS1 E06_Bromheadia_finlaysoniana_ITS1 E07_Dressleria_dilecta_X502F E08_Cyrtopodium_falciobum_X502F E09_Acriopsis_ridleyi_X502F E10_Dipodium_6052_X502F E11_Thecostele_alata_28_X502F E12_Thecostele_alata_32_X502F 
F01 F02 F03 F04_Dipodium_6052_ITS4 F05_Dipodium_5431_ITS4 F06_Bromheadia_finlaysoniana_641R F07_Dressleria_dilecta_X1599R F08_Cyrtopodium_falciobum_X1599R F09_Acriopsis_ridleyi_X1599R F10_Dipodium_6052_X1599R F11_Thecostele_alata_28_X1599R F12_Thecostele_alata_32_X1599R 
G01 G02 G03 G04_Dipodium_6055_ITS1 G05_Dipodium_conduplicatum_ITS1 G06_Claderia_viridiflora_ITS1 G07_Ansellia_africana_X502F G08_Grammangis_ellisii_X502F G09_Bromheadia_finlaysoniana_X502F G10_Dipodium_6055_X502F G11_Grammatophyllum_stapeliiflorum_X502F G12 
H01 H02 H03 H04_Dipodium_6055_ITS4 H05_Dipodium_conduplicatum_ITS4 H06_Claderia_viridiflora_641R H07_Ansellia_africana_X1599R H08_Grammangis_ellisii_X1599R H09_Bromheadia_finlaysoniana_X1599R H10_Dipodium_6055_X1599R H11_Grammatophyllum_stapeliiflorum_X1599R H12 

Вместо того, чтобы время, чтобы переименовать 96 файлов каждый раз, когда я получаю тарелку назад, я пытаюсь взять этот файл, который я уже подготовил заранее, чтобы направить меня на загрузку тарелки, чтобы я не испортил ее (неправильная ДНК в неправильном колодце), идентифицировать позицию по префиксу (например, A06 ... H06), сопоставить его с именами файлов в каталоге, поскольку они имеют одинаковое расположение ячеек, так что скрипт будет перебирать весь файл csv и переименовать все файлы в form: 5-3-13-G-Templates_A06_Primer-G.ab1 станет A06_Eulophia_euglossa_ITS1.ab1

Я написал часть сценария Python, но я с трудом предвидя следующий шаг:

import csv 
data = csv.DictReader(open('Template.csv', 'rU'), delimiter='\t') 
for row in data: 
    values = row.values() 
    values.sort() 
    #Provides values by row in order from left to right 

Это где я застрял. Что мне делать теперь, когда у меня есть эти списки? Для петель? У меня просто проблемы с представлением решения.

Я полагаю, часть решения будет немного следующего кода, модифицированного из другого ответа я нашел:

folder = r"/home/ryan/Desktop/MMEE/plateG" #Make sure only the .ab1 files are in this directory 
import os 
for root, dirs, filenames in os.walk(folder): 
    for filename in filenames: 
     fullpath = os.path.join(root, filename) 
     filename_split = os.path.splitext(fullpath) 
     filename_zero, fileext = filename_split 
     os.rename(fullpath, SOMEVARIABLE + fileext) 

Часть выше, где я переименовать файл с os.rename и использовать «SOMEVARIABLE «где я думаю, что имя из приведенного выше списка должно быть отправлено в имя файла. Но как его получить, уровень моего мастерства сейчас выше. Или, может быть, я просто устал.

Любая помощь будет оценена по достоинству. Надеюсь, что это достаточно ясно, но при необходимости я могу дать разъяснения. Ура!

Отредактировано для добавления: Старое имя файла и новое имя файла разделяют только идентификатор местоположения, например. A01, B06, H12. Новые имена файлов будут взяты из файла csv, чтобы файл с именем 5-3-13-G-Templates_F08_Primer-G.ab1 вытащил имя из столбца 8, но только тот, у которого есть заголовок «F08». Строки от A до H. По сути, я хочу выделить текст из местоположения RowF, Column8 (хотя на данный момент у меня нет заголовков строк) и применяйте этот текст к имени файла с F08 в нем. Я думал, что может быть способ сопоставить каждую подстроку A01-H12 из списка сгенерированных значений и вытащить текст из каждого в прежнее имя файла, которое они заменяют, так как они также совпадают с теми же подстроками от A01 до H12.

Я хочу, чтобы файлы переименованы следующим образом: (NB - A01 до D04 были пустые колодцы, чтобы они не имеют никакой другой ярлык, чем ID)

5-3-13-G-Templates_E04_Primer-G.ab1 > E04_Dipodium_6052_ITS1.ab1 
5-3-13-G-Templates_F04_Primer-G.ab1 > F04_Dipodium_6052_ITS4.ab1 
5-3-13-G-Templates_G04_Primer-G.ab1 > G04_Dipodium_6055_ITS1.ab1 
5-3-13-G-Templates_H04_Primer-G.ab1 > H04_Dipodium_6055_ITS4.ab1 
5-3-13-G-Templates_A05_Primer-G.ab1 > A05_Grammatophyllum_scriptum_ITS1.ab1 
5-3-13-G-Templates_B05_Primer-G.ab1 > B05_Grammatophyllum_scriptum_ITS4.ab1 
... 
+0

Я думаю, что вы предоставили слишком много деталей, но игнорировали важную роль, как делает старое имя файла и новое имя файла матч? Где получить новое имя файла, из столбца 6 таблицы CSV или любого столбца таблицы? Есть 96 полей в CSV и 96 файлов для переименования, как поле соответствует определенному файлу? Покажите больше примеров. –

+0

Спасибо за понимание; Я попытаюсь добавить для редактирования для ясности. Я думал, что предоставил информацию о совпадении: старое имя файла и новое имя файла будут разделяться только идентификатором ячейки, например. A01, B06, H12. Новые имена файлов будут взяты из файла CSV, чтобы файл с именем 5-3-13-G-Templates_F08_Primer-G.ab1 вытащил имя из столбца 8, да, но только тот, у кого есть «F08» в заголовке. Строки от A до H. По сути, я хочу выделить текст из местоположения RowF, Column8 (хотя на данный момент у меня нет заголовков строк) и применяйте этот текст к имени файла с F08 в нем. – kitkor

ответ

1
  1. обработки файла CSV, собрать все новые имена и сделайте карту из идентификатора образца в новое имя.

  2. Пройдитесь по каталогу, найдите все файлы, извлеките образцы идентификаторов из их базового имени и найдите новые имена из id_map, созданного на 1-м шаге. Переименуйте в соответствии с новыми именами.

import csv 
import os 
import re 

# First 
data = csv.DictReader(open('csv.csv', 'r'), delimiter = "\t") 
id_map = {} 
for row in data: 
    for name in row.values(): 
     # find all sample IDs as a list in the cell, should only get 1 ID 
     ids = re.findall(r'[A-H][0-9]{2}', name) 
     if len(ids) != 1: 
      print "Confused at " + name 
     id_map[ids[0]] = name 

# Second 
folder = 'files/' 
for root, dirs, files in os.walk(folder): 
    for filename in files: 
     fullname = os.path.join(root, filename) 
     basename, extension = os.path.splitext(filename) 
     # find all sample IDs in the basename, should only get 1 ID 
     ids = re.findall(r'[A-H][0-9]{2}', basename) 
     if len(ids) != 1: 
      print "Confused at " + os.path.join(root, filename) 
     if ids[0] in id_map: 
      new_name = id_map[ids[0]] + extension 
      os.rename(fullname, os.path.join(root, new_name)) 
     else: 
      print "New name for " + fullname + " not found" 
+0

Отлично! Это сработало отлично; Спасибо большое. Я мгновенно забыл о 're.findall'. Это, безусловно, сэкономит мне время в лаборатории, когда мы получим последовательности назад. – kitkor

Смежные вопросы