我尝试在从os.scandir()派生的文件名中找到一个字符串 就像“ ilikecake15.pdf”或“ ilike1615cake.pdf”中的字符串“ 15”一样。字符串是唯一的。 这段代码的背景:我有几个要与列表匹配的PDF文件夹。文件名包含列表中部分字符串。 我认为使用to for循环可以解决问题,可以从txt获取信息。另一个来自os.scandir()和find()来检查!= -1。
故障排除给我留下了两个我试图与s.find(ins)比较的.txt值。我的目标是找出!= -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找到匹配项时,打印后一条语句
答案 0 :(得分:0)
我不确定我是否完全了解您所描述的问题的性质,但是我确实看到一件事几乎肯定不会像您期望的那样。
一旦遍历一个打开的文件对象的所有行,再次尝试对其进行遍历将不会产生任何结果,因为跟踪文件中工作位置的内部指针现在位于末尾。因此,对于tdlines
的第一行,您的循环将按预期运行,但是对于其余各行,内部的for
循环将永远不会运行。
解决方案是在每次迭代中通过tdfiles
关闭并重新打开tdlines
,或者在内部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')