我试图找到哪些文件没有相似的文件名(差不多),以便我可以生成它们。但是这段代码基本上写了所有文件名,而我希望它通过第一个目录,浏览文件并检查是否在其他文件夹中有等效的_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
答案 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>