Постоянный файл filename.txt для первой строки текста - PullRequest
0 голосов
/ 22 марта 2020

Я пишу скрипт с Python, в котором несколько файлов будут сгенерированы с тем же именем. Мне нужно в каждом маршруте, изменить имя текста для первой строки этого текста. Я перешел по некоторым ссылкам в StackOverflow, но у меня возникли проблемы.

Вот мой код:

for myfile in allfiles:
    if myfile.endswith(".fna"):
        print(com1)
        print(com2)
        #We move the document that interests us.
        print("cp /Users/monkiky/Desktop/control/output.align/gtdbtk.bac120.user_msa.fasta  /Users/monkiky/Desktop/control/ultimate_output/concatenates")
        # Filename must be rename, let's rename with the name of the bacteria (first line in the document).
        #print('mv /Users/monkiky/Desktop/control/ultimate_output/concatenates/gtdbtk.bac120.user_msa.fasta "$(head -1 /Users/monkiky/Desktop/control/ultimate_output/concatenates)"')
        #We move the document that interests us.

Если я просто напишу это в терминале

mv /Users/monkiky/Desktop/control/ultimate_output/concatenates/gtdbtk.bac120.user_msa.fasta "(head -1 /Users/Desktop/control/ultimate_output/concatenates)"

Я получил этот вывод

head: Error reading /Users/monkiky/Desktop/control/ultimate_output/concatenates
mv: rename /Users/Desktop/control/ultimate_output/concatenates/prueba.txt to : No such file or directory

Где я не прав?

1 Ответ

0 голосов
/ 22 марта 2020

1) в этой команде:

mv /Users/monkiky/Desktop/control/ultimate_output/concatenates/gtdbtk.bac120.user_msa.fasta "$(head -1 /Users/Desktop/control/ultimate_output/concatenates)"

файл, переданный в качестве аргумента head, должен быть… да, файл , а не каталог, в котором он находится. Итак:

mv /Users/monkiky/Desktop/control/ultimate_output/concatenates/gtdbtk.bac120.user_msa.fasta "$(head -1 /Users/Desktop/control/ultimate_output/concatenates/gtdbtk.bac120.user_msa.fasta)"

2) вызов команды оболочки из Python для выполнения этой простой операции - плохая идея. Правильный способ сделать это в Python не включает shell:

import os
myfile = '/Users/monkiky/Desktop/control/output.align/gtdbtk.bac120.user_msa.fasta'
with open(myfile, 'r') as f:
    firstline = f.readline().strip()
os.rename(myfile, firstline)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...