我不久前发了一个问题:
我能够将字典中的文件列表写入文本文件。
所以我的代码看起来像这样:
simonDuplicates = chain.from_iterable([files for files in file_dict.values() if len(files) > 1])
text_file.write("Duplicates Files:%s" % '\n'.join(simonDuplicates))
这基本上打印出目录和文件,例如:
C:/Users/Simon/Desktop/myfile.jpg
问题是正斜杠。我希望它们是反斜杠(在Windows中使用)。我尝试使用os.path.normpath
,但它不起作用
simonDuplicates = chain.from_iterable([files for files in file_dict.values() if len(files) > 1])
os.path.normpath(simonDuplicates)
text_file.write("Duplicates Files:%s" % '\n'.join(simonDuplicates))
我收到以下错误:
Traceback (most recent call last):
File "duff.py", line 125, in <module>
os.path.normpath(duplicates)
File "C:\Python27\lib\ntpath.py", line 402, in normpath
path = path.replace("/", "\\")
AttributeError: 'itertools.chain' object has no attribute 'replace'
我认为它不起作用,因为我应该使用iSlice?
Martijn Pieter对这个问题的回答看起来是对的:
Troubleshooting 'itertools.chain' object has no attribute '__getitem__'
有什么建议吗?
答案 0 :(得分:1)
您正尝试在chain.from_iterable
上应用os.path.normpath
,
它返回一个生成器对象。因此,您必须迭代直到生成器耗尽,才能获得字符串类型的完整文件名列表。
你可以像这样使用列表理解
simonDuplicates = [os.path.normpath(path) for path in chain.from_iterable(files for files in file_dict.values() if len(files) > 1)]
或者您可以使用map这样的功能
simonDuplicates = map(os.path.normpath, chain.from_iterable(files for files in file_dict.values() if len(files) > 1))