斯堪的纳维亚()在循环中为find()创建问题

2024-10-03 06:28:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在文件名中找到一个字符串斯堪的纳维亚() 就像“ilikecake15.pdf”或“ilike1615”中的字符串“15”蛋糕.pdf'字符串是唯一的。 此代码的背景:我有几个带有PDF的文件夹,需要与列表匹配。文件名包含列表中的部分字符串。 我想使用for循环就可以了,一个从txt获取信息的循环。另一个来自斯堪的纳维亚()和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

这已经变成了一个怪物,而试图解决它。但预期的结果是在从文件中找到匹配项时打印后一条语句tdlines.txt文件在tdfiles.txt文件你知道吗


Tags: 字符串intxtforosaslineopen
1条回答
网友
1楼 · 发布于 2024-10-03 06:28:10

我不确定我是否完全理解你所描述的问题的本质,但我确实看到一件事,几乎可以肯定的是,它的行为并不像你所期望的那样。你知道吗

一旦您遍历一个打开的文件对象的所有行,再次尝试遍历它将不会产生任何结果,因为跟踪文件中工作位置的内部指针现在位于末尾。因此,对于tdlines的第一行,您的循环将按预期运行,但是对于其余的行,内部for循环将永远不会运行。你知道吗

解决方案是通过tdlines在每次迭代中关闭并重新打开tdfiles,或者^{}回到文件的开头,就在内部for循环之前。以下是后一种方法:

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')

相关问题 更多 >