Python手术室步行循环查看不同驱动器中的目录列表

2024-05-19 11:03:02 发布

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

我是一个Python初学者,正在寻找有关使用手术室步行. 在

我的想法是从一个SQL数据库中提取一个目录列表,这些目录可能有不同的驱动器号,甚至有一个UNC路径。我需要做的是搜索这些目录,找到一个特定名称的文件并删除它。因为文件可能在任何目录中,所以它需要搜索所有的目录。目录的列表是不确定的,所以我的想法是把它们存储到一个列表中手术室步行查看列表中的所有目录。在

def get_location():
    c.execute('SELECT ADDRESS FROM DIRECTORY')
    data = c.fetchall()
    SQLlist = [row for row in data]
    return SQLlist


addresslist = get_location()


def FileDeleter():
    for root, dirs, files in chain.from_iterable(os.walk(addresslist[0:], topdown=False) for path in (str(addresslist[0:]))):
        for file in files:
            if correctID in file:
                if file.endswith('.custextn'):
                    os.remove(os.path.join(root, file))

这是目前的代码,但之前我尝试过:

^{pr2}$

好像是这样手术室步行不接受列表(/tuples)。如果我设置了addresslist[0]或addresslist[1],它实际上是可以工作的,但是由于我不知道可能有多少地址,所以很遗憾,我不能将X地址存储为单独的变量并复制函数。在

运行代码时遇到的错误是:

'TypeError:应为str、bytes或操作系统路径对象,非列表'

最后,我用一个硬编码的地址列表进行了测试,目的是排除如何从数据库中提取列表的问题,例如:

addresslist = ['C:\\Subfolder1\\Subfolder2', 'D:\\Subfolder1\\Subfolder2']

而且,由于解包错误:

x,y = ['C:\\Subfolder1\\Subfolder2', 'D:\\Subfolder1\\Subfolder2']

谢谢


Tags: 文件in路径目录数据库列表foros
2条回答

我现在已经开始工作了,我想确认一下我做了什么。在

有两个问题。我需要@TheF1rstPancake和@Michael Butscher建议的附加for循环。在

第二个问题是从数据库中提取目录列表。在

def get_location():
    c.execute('SELECT ADDRESS FROM DIRECTORY')
    data = c.fetchall()
    SQLlist = [row for row in data]
    return SQLlist

我在使用上面的方法,但是当你打印(数据)时,你得到了一个元组或者一个元组列表,它无法遍历这些元组手术室步行使用。结果看起来像

^{pr2}$

我使用的解决方案如下

def get_location():
    c.execute('SELECT ADDRESS FROM DIRECTORY')
    data = c.fetchall()
    SQLlist = []
    for row in range(len(data)):
        SQLlist.append(data[row][0])
    return SQLlist

下面是我的列表:

['C:\\Subfolder1\\Subfolder2', 'D:\\Subfolder1\\Subfolder2']

通过附加for循环运行此列表时手术室步行现在正确搜索所有目录。在

谢谢大家的帮助,真的很感谢!在

你的第一个for循环没有做你想要的。很近,但不是很近。在

for root, dirs, files in chain.from_iterable(os.walk(addresslist[0:], topdown=False) for path in (str(addresslist[0:])))

循环当前正在将addresslist转换为字符串。然后您实际上是在放入path变量的字符串中的每个字符进行迭代。然后,您尝试连接一系列os.walk生成器。但是os.walk需要一条单一路径。您也没有在代码中的任何其他地方使用path变量。在

这应该是:

for path in addresslist:
   # it looks like you are worried that not all paths will be strings
   # if that's really a concern, then leave this next line.
   # Otherwise, I think it is safe to delete it
   path = str(path) 
   for root, dirs, files in os.walk(path, topdown=False):

这将从addresslist(这是您要搜索的路径)中的每个元素,并对其执行os.walk。我认为您根本不需要在这里使用chain。在

如果您想使用chain(这不是必需的),您可以按照这个SO-post:os.walk multiple directories at once提供的大纲进行操作。在

^{pr2}$

您还应该做的一件事是将addresslist作为传递到函数中的参数。在

def FileDeleter(addresslist):
   # your function code here
# then you need to actually call the function
addresses = get_locations()
FileDeleter(addresses)

随着代码变得更加复杂,依赖全局变量会给您带来很多麻烦。在

相关问题 更多 >

    热门问题