在python中将变量作为字符串传递给循环

时间:2011-10-29 18:34:36

标签: python unix

我有一个python脚本,它将每个文件放在一个目录中,遍历文件的内容并为每个输入文件创建一个输出文件。此输出文件可能有重复的条目,如果是,我只想采用类似于UNIX命令的唯一值

uniq -u input.file > output.file

虽然我可以使用shell脚本来执行此操作,但我希望包含一行只接受唯一值的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")

我收到以下错误:

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

我尝试了一些语法来尝试识别变量但在网络上找不到足够类似的例子。任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:3)

你有

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。)