如何顺序搜索文件并保存?

时间:2016-06-06 12:42:12

标签: python file operating-system

我在下面的代码中首先尝试查找PDF文件。如果它甚至没有成功找到单个PDF文件,那么它继续搜索例如PDF文件。 .TIF文件位于同一文件夹中。

但是,我有两个问题。首先,当它在文件夹中找到PDF文件时,它还会在.txt文件中打印所有.TIF文件。但是当它找不到PDF文件时,它就会停止(即使没有 break )并且不会产生.txt文件。我很困惑,感谢任何帮助。

b = os.walk('C:\\Users\\USER\\Desktop\\FOLDER')
os.listdir('C:\\Users\\USER\\Desktop\\FOLDER')
f = []
for(dirpath, dirnames, filenames) in b:
    if f.extend(os.path.splitext(name)[0] for name in filenames if name.lower().endswith((".pdf"))) == []:
        pass
        break
    elif f.extend(os.path.splitext(name)[0] for name in filenames if name.lower().endswith((".tif"))) == []:
        pass


def save_to_file(text):
    for name in f:
        with open('C:\\Users\\USER\\Desktop\\FOLDER\\test.txt', mode='wt', encoding='utf-8') as myfile:
            myfile.write('\n'.join(text))
            myfile.write('\n')

save_to_file(f)

1 个答案:

答案 0 :(得分:2)

试试这个:

import os

def gather_files(folder, ending):
    contents = os.walk(folder)
    files = []
    for (dirpath, dirnames, filenames) in contents:
        files += ([file.splitext()[0] for file in filenames if file.lower().endswith(ending)])
    return files


def main():
    f = gather_files("test", ".pdf")
    if not f:
        f = gather_files("test", ".tif")

    if not f:
        print("No .pdf or .tif files found in the given directory.")
    else:
        with open("test_out.txt", "w", encoding="utf-8") as output:
            output.write("\n".join(f) + "\n")

if __name__ == "__main__":
    main()

这对你有用。作为替代方案,您可以通过硬编码文件夹和结尾等值将主要部分移动到方法gather_files,或者您可以提供关键字" alternative_ending"或者类似的方法。

也许再看一下你的代码吧。你有一个方法 save_to_file(text),你用f调用它,然后在其中迭代f。可能是一个错字,你应该迭代文本,而不是f。但是你根本不需要迭代,因为text(或f)包含文件名作为字符串列表。所以

with open("test_out.txt", "w", encoding="utf-8") as output:
    output.write("\n".join(text) + "\n")

会做你想做的一切。