python-3.x - 如何检查文件是否已包含我要附加的文本?
问题描述
我目前正在做一个项目。所以我想读取目录中的所有 *.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
`
提前致谢!
解决方案
您可以做的一件事是加载文件内容并检查文件是否在文件中:
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
请注意,您需要在当前目录中创建一个名为的文件。
推荐阅读
- java - 转换器java程序中的FTextField、Jlabel等错误
- microsoft-dynamics - 日期筛选器未筛选正确的数据,如何处理 Dynamics 365、PSA 中的错误
- python - 为什么当我将 OpenCV 与线程一起使用时会崩溃?
- sql - 在 GROUP BY 查询中除以值
- spring-boot - EntityManager 与 Spring Data JPA 的存储库
- spring - 使用 Criteria 查询数组列是否包含
- python - Selenium Python ActionChain 不工作(不可交互元素)
- r - 在尊重可变对比度编码的同时,如何使用 anova() 对 lm 和 lmer 对象进行显着性测试?
- python - Python 字典 - 如何将多个值作为字符串返回
- arrays - 无法获得每个学生的姓名和年龄。相反,我得到了奇怪的字符和年龄 = 0?