代码总是在输出中写入文件名

时间:2013-11-25 22:53:24

标签: python

我试图找到哪些文件没有相似的文件名(差不多),以便我可以生成它们。但是这段代码基本上写了所有文件名,而我希望它通过第一个目录,浏览文件并检查是否在其他文件夹中有等效的_details.txt,如果没有写出名称。

我在文件夹1中有两个11.avi和22.avi,在文件夹2中只有11_details.txt,所以我确定我应该得到一个文件名

    import os,fnmatch
    a = open("missing_detailss5.txt", "w")
    for root, dirs, files in os.walk("1/"):
        for file1 in files:
            if file1.endswith(".dat"):
                    for root, dirs, files in os.walk("2/"):
                        print(str(os.path.splitext(file1)[0]) + "_details.txt")
                        print(files)
                        if not (os.path.splitext(file1)[0] + "_details.txt") in files:
                              print(str(os.path.splitext(file1)[0]) + "_details.txt is missing")
                              a.write(str(os.path.splitext(file1)[0]) + "_details.txt" + os.linesep)
    a.close()

    here is my debug >>> 
    11_details.txt
    ['22_details.txt']
    11_details.txt is missing
    22_details.txt
    ['22_details.txt']
    22_details.txt is missing

2 个答案:

答案 0 :(得分:0)

我刚刚更正你的代码而没有编写新的代码,你只是错过了比较的txt扩展名。

import os
a = open("missing_detailss4.txt", "w")
 for root, dirs, files in os.walk("1/"):
    for file in files:
      if file.endswith(".avi"):
             for root, dirs, files in os.walk("2/"):
                  if not (str(os.path.splitext(file)[0]) + "_details.txt") in files:
                       a.write(str(os.path.splitext(file)[0]) + "_details.txt" + os.linesep)
 a.close()

答案 1 :(得分:0)

如果我正确地读了你的问题,那么以“_details.txt”结尾的文件应该在同一个(相对)目录中。也就是说,“1 / some / path / file.avi”应该有一个相应的文件“2 / some / path / file_details.txt”。如果是这种情况,则无需迭代两次:

import os
with open("missing_detailss5.txt", "w") as outfile:
    path1 = '1/'
    path2 = '2/'
    allowed_extensions = ['.dat', '.avi']
    for root, dirs, files in os.walk(path1):
        for file1 in files:
            file1, ext = os.path.splitext(file)
            if ext not in allowed_extensions: continue
            path2 = os.path.join(path2, os.path.relpath(os.path.join(root, file1 + '_details.txt'), path1))
            if not os.path.exists(path2):
                print(os.path.basename(path2) + ' is missing.')
                outfile.write(os.path.basename(path2) + os.linesep)

如果您不关心要在第一个文件夹中检查哪些扩展程序,请删除allowed_extensions = ['.dat', '.avi']if ext not in allowed_extensions: continue行,并将file1, ext = os.path.splitext(file)更改为file1 = os.path.splitext(file)[0]。< / p>