1

所以我有一个脚本,它生成为字典中每个键命名的文件。(下面的脚本)

 for key, values in sequencelist.items():
     with open(key, 'w') as out:
         for value in values:
             out.write('\n'.join(value.split()) + '\n')

有人可以帮我修改上述语法以做更多事情吗?我想在文件名上附加一些纯文本,并添加当前的len(dict.keys())使用range() 参见下面的脚本,这不起作用!:)

for key, values in sequencelist.items():
    for i in range(len(sequencelist.keys())):
        j = i+1
        with open('OTU(%j)' +'_' + key +'.txt' %j, 'w') as out:
            for value in values:
                out.write('\n'.join(value.split()) + '\n')

所以这个创建的第一个文件是 OTU(1)_ key.txt

我确信这with open()条线是 100% 错误的。

有人还可以链接我的东西来阅读在工作之前从行%j中调用变量的使用吗?j我试图使用来自这个溢出答案的代码(输入一个文本文件并在 Python 中编写多个输出文件),没有任何解释。

4

1 回答 1

1

尝试以下

for count, (key, values) in enumerate(sequencelist.items()):
    with open('OTU(%d)_%s.txt' % (count+1, str(key)), 'w') as out:
        for value in values:
            out.write('\n'.join(value.split()) + '\n')

我用你的值迭代交换了你的公开调用的顺序,这样你就不会得到len(sequencelist)每个值的文件。在此更改之后,您的论点似乎j不需要。每次循环重复时, enumerate 调用都会使 for 循环的计数部分增加(不必称为计数)。

%d要求一个整数,一个字符串,这%s取决于键名将与str(). 如果您的密钥是一些自定义类,您需要将其转换为更好的字符串格式,因为您会得到类似<class __main__.Test at 0x00000....>.

于 2013-04-12T22:09:14.133 回答