首页 > 解决方案 > 如何检查文件是否已包含我要附加的文本?

问题描述

我目前正在做一个项目。所以我想读取目录中的所有 *.pdf 文件,提取它们的文本并将其附加到文本文件中。到目前为止,一切都很好。我能够做到这一点,是的。

现在的问题是:如果我再次读取同一个目录,它会再次附加相同的文件。有没有办法检查提取的文本是否已经在文件中,从而跳过整个内容?

我的代码现在看起来像这样(我已经创建了目录变量):

`

for filename in os.listdir(directory):
    if filename.endswith(".pdf"):
        file = os.path.join(directory, filename)
        print(file)

        #parse data from file
        file_data = parser.from_file(file)

        #get files text content
        text = file_data['content']
        #print(type(text))
        print("len ", len(text))
        #print(text)

        #save to textfile
        f = open("test2.txt", "a+", encoding = 'utf-8')
        f.write(text)
        f.close()


    else:
        continue

`

提前致谢!

标签: python-3.xappend

解决方案


您可以做的一件事是加载文件内容并检查文件是否在文件中:

if text in open("test2.txt"):
    # write here
else:
    # text is already in file, don't write

然而,这是非常低效的。更好的方法是使用您已经编写的文件名创建一个文件,并检查:

(在代码的开头):

files = open("files.txt").readlines()

(之前parser.from_file(file)):

if file in files:
   continue # don't read or write

(之后f.close()):

files.append(file)

(整个循环结束后)

with open("files.txt", "w") as f:
    f.write("\n".join(files))

把它们放在一起:

files = open("files.txt").readlines()

for filename in os.listdir(directory):
    if filename.endswith(".pdf"):
        file = os.path.join(directory, filename)
        if file in files:
            continue # don't read or write
        print(file)

        #parse data from file
        file_data = parser.from_file(file)

        #get files text content
        text = file_data['content']
        #print(type(text))
        print("len ", len(text))
        #print(text)

        #save to textfile
        f = open("test2.txt", "a+", encoding = 'utf-8')
        f.write(text)
        f.close()
        files.append(file)
    else:
        continue

with open("files.txt", "a+") as f:
    f.write("\n".join(files))

files.txt请注意,您需要在当前目录中创建一个名为的文件。


推荐阅读