Передача переменной в цикл как строка в Python - PullRequest
0 голосов
/ 29 октября 2011

У меня есть скрипт Python, который будет принимать каждый файл в каталоге, перебирать содержимое файла и создавать выходной файл для каждого входного файла.Этот выходной файл может содержать повторяющиеся записи, и если это так, я хотел бы принять только уникальные значения, подобные команде UNIX

uniq -u input.file > output.file

Хотя я мог бы использовать для этого сценарии оболочки, я хотел бы включить строкуPython, который будет принимать только уникальные значения.Я знаю, что могу сделать это:

import os
os.system("uniq -u input.file > output.file")

Однако, когда я пытаюсь поместить это в цикл, чтобы он сделал уникальными все файлы, которые я только что сделал:

for curfile in fs:
    if curfile[-3:]=='out':
        os.system("uniq -u %s > %s") % (str(curfile), str(curfile[:-4] + ".uniq")

Iполучить следующую ошибку:

unsupported operand type(s) for %: 'int' and 'tuple'

Я попробовал несколько синтаксисов, чтобы попытаться распознать переменные, но не могу найти достаточно похожий пример в Интернете.Любые предложения будут с благодарностью.

1 Ответ

3 голосов
/ 29 октября 2011

У вас есть

os.system(
             "uniq -u %s > %s"
         ) % ( # The % and this paren should be inside the call to os.system
                 str(curfile), 
                 str(curfile[:-4] + ".uniq")
               # you're missing a close paren here

вам нужно

os.system(
             "uniq -u %s > %s" % (
                                     str(curfile), 
                                     str(curfile[:-4] + ".uniq")
                                 )
         )

Сначала вы форматируете строку, , затем она переходит к os.system - так, как она у вас естьтеперь строка переходит к os.system, затем вы пытаетесь % получить результат, который равен int.(Код возврата uniq.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...