我尝试在从os.scandir()派生的文件名中查找字符串,比如在'ilikecake15.pdf‘或'ilike1615cake.pdf’中的字符串'15‘。这段代码的背景:我有几个包含pdf的文件夹,我需要将它们与列表进行匹配。文件名包含列表中字符串的一部分。我认为使用to for循环可以做到这一点,从txt中获取信息。另一个来自os.scandir()和find(),用于检查!= -1。
故障排除给med留下了两个.txt值,我尝试与s.find(ins)进行比较。我的目标是整理出!= -1。如果我定义v1和v2并执行v1.find(v2),它似乎可以工作,但在嵌套的for循环中,所有内容都是-1。(即使我看到正确的比赛)我已经使用xx从文本文件中删除了像G:\thispath\和\thispath这样的路径信息。甚至尝试将str()添加到几乎所有内容(以防万一)
import os
tdpath = 'G:\Somepathwithalotofpdfs'
tdfiles = 'G:\Anothersuitablepath/tdfiles.txt'
tdlines = 'G:\Anothersuitablepath/tdlines.txt'
with os.scandir(tdpath) as pth, open(tdfiles, 'w') as fls:
for td in pth:
if td.is_file():
fls.write(str(os.fsdecode(td)[51:])) #str and [51:] added to help troubleshoot
fls.write('\n')
with open(tdlines) as fp, open(tdfiles) as fls:
for cnt, line in enumerate(fp):
for cmt, lajn in enumerate(fls):
print(lajn, line) #just troubleshooting
print(str(lajn).find(str(line))) #just troubleshooting
if lajn.find(line) != -1:
print('KASWSOFJIDFHAIFHSIHFIAHS') # Hlep ples
在尝试解决它时,这已经变成了一个怪物。但预期的结果是在tdfiles.txt中的文件tdlines.txt中找到匹配项时打印后一条语句
发布于 2019-01-16 15:42:43
我不确定我是否完全理解您描述的问题的本质,但我确实看到了一件事,几乎可以肯定的是,它的行为并不像您所期望的那样。
一旦您遍历了打开的文件对象的所有行,再次尝试遍历它将不会产生任何结果,因为跟踪文件中工作位置的内部指针现在位于末尾。因此,对于tdlines
的第一行,您的循环将按照预期运行,但对于其余行,内部for
循环将永远不会运行。
解决方案是在每次迭代时通过tdlines
关闭并重新打开tdfiles
,或者在内部for
循环之前用seek()
返回文件的开头。下面是后一种方法:
with open(tdlines) as fp, open(tdfiles) as fls:
for cnt, line in enumerate(fp):
fls.seek(0)
for cmt, lajn in enumerate(fls):
if lajn.find(line) != -1:
print('KASWSOFJIDFHAIFHSIHFIAHS')
https://stackoverflow.com/questions/54219051
复制相似问题