gpt4 book ai didi

python - 使用 python 查找 PDF 和 DOC 文件并将其移动到不同的目录

转载 作者:太空宇宙 更新时间:2023-11-03 17:41:58 24 4
gpt4 key购买 nike

我尝试查找 PDF 和 DOC 格式的简历并将其移动到不同的目录,/PDF 目录中的 PDF 文件和 /DOCX 目录中的 DOC 文件。我担心的是;

  1. 查找 PDF 和 DOC 文件的正则表达式是否正确?简历的命名例如:john right ResumeQA.docabcResumeC.docShawnResume.pdfjohnright_ResumeQA.pdf

  2. 我在 IDE 上或输出文件中都没有得到任何计数或输出。

我想出的代码如下:

import os, sys, re

countpdf, countdoc = 0, 0

pdf = re.compile(r'\b\w*{resume}\w*\.[pdf]\b')
docx = re.compile(r'\b\w*{resume}\.[doc]\b]')

#os.mkdir(r'/Users/Desktop/Networking materials/PDF')
pdfdir = os.path.dirname(r'/Users/Desktop/Networking materials/PDF/')
print pdfdir

#os.mkdir(r'/Users/Desktop/Networking materials/DOCX')
docxdir = os.path.dirname(r'/User/Desktop/Networking materials/DOCX/')
print docxdir

out = sys.stdout
with open('output.txt', 'w') as outfile:
sys.stdout = outfile
for rdir, directory, files in os.walk(r'/Users/Desktop/Networking materials/'):
match1 = re.findall(pdf, str(files))
print match1
for items1 in match1:
os.chdir(pdfdir)
countpdf +=1
print countpdf

match2 = re.findall(docx, str(files))
print match2
for items2 in match2:
os.chdir(docxdir)
countdoc +=1
print countdoc
sys.stdout = out

到目前为止我得到的唯一输出是:

 /Users/Desktop/Networking materials/PDF
/Users/Desktop/Networking materials/DOCX

你们中的任何人都可以更正我的代码吗?如果可能,请建议一种更有效的方法来完成此任务。

最佳答案

不,您的正则表达式不正确,您可以在 python shell 中轻松测试它们:

In [17]: a
Out[17]:
[u'john right ResumeQA.doc',
u' abcResumeC.doc',
u' ShawnResume.pdf',
u' johnright_ResumeQA.pdf']

In [20]: pdf = '\b\w*{resume}\w*\.[pdf]\b'

In [21]: for j in a:
print re.findall(pdf, j)
....:
[]
[]
[]
[]

因为您没有看到任何匹配的内容。您应该使用一些正则表达式测试器来检查您的正则表达式(例如 this )。

我看到以下正则表达式:

pdf_re = ".+resume\w*\.pdf"
doc_re = ".+resume\w*\.doc"

只要您将 re.I 标志传递给正则表达式,就应该完全没问题,这将提示正则表达式引擎忽略大小写。上面的 pdf 正则表达式应该匹配任何开头有一些字符的字符串(点加号),后跟字符串“resume”(忽略大小写),后跟 0 个或多个类似单词的字符(所以字母),后跟实际的点(.dot是特殊字符,因此需要转义),后跟字符串 pdf。

re.findall(".+resume.*\.pdf", j, re.I)

查看其余代码。

不需要此调用:sys.stdout = outfile。如果你想写入文件,只需使用 outputfile.write(content)

您在此处搜索文件的方式 match1 = re.findall(pdf, str(files)),这不是您想要的继续方式。 `files' 包含文件列表,您想要找到要移动的特定文件,您不想处理连接在一起的所有文件名。

下一步:os.chdir 实际上更改了工作目录,它不会更改文件的位置,也不会移动文件。要移动文件,请检查此 question on SO

所以你需要做一些事情:

for rdir, directory, files in os.walk(r'/home/pawel/Documents'):
for f in files:
match = re.findall(pdf_re, f)
if match:
matching_file = os.path.join(rdir, f)
target_location = os.path.join(pdfdir, f)
os.rename(matching_file, target_location)

关于python - 使用 python 查找 PDF 和 DOC 文件并将其移动到不同的目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30409428/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com