gpt4 book ai didi

python - 如何获取文件夹中文件的序号?

转载 作者:行者123 更新时间:2023-11-28 23:00:39 31 4
gpt4 key购买 nike

我有 Windows PC。我的脚本应该识别文件夹中命令行中传递的文件的序列号,即

myscript.py \\network-drive\files\Long-long.file.name.with.numbers.txt

文件夹内容如下:

\\network-drive\files\
folder1
folder2
file1
file2
Long.long.file.name.with.numbers.txt
file3
file4

我的脚本应该识别命令行中给出的文件的序列号,即应该返回 5(文件夹也将被计算在内;假设文件按名称排序)。

更新。我已经停止了以下内容:

import sys
import os.path

if sys.argv[1]: # regardless of this verification, exception happens if argument is not passed
head, tail = os.path.split(sys.argv[1])
print head
print os.listdir(head)

listdir 返回的列表不允许我识别什么是文件夹和什么是文件。所以,我无法对它们进行正确排序。

最佳答案

您正试图解决几个问题,并且有几个解决方案可供选择。

1st - 您是否在寻找自然排序的东西,即:

/path/to/folder/
subfolder01/
test1.png
test2.png
test3.png
test10.png
test11.png

如果是这样...您需要创建一个自然排序方法。如果您对字母数字排序感到满意:

/path/to/folder/
subfolder01/
test1.png
test10.png
test11.png
test2.png
test3.png

然后标准排序将起作用。根据您对文件进行排序的方式,结果的索引会有所不同。

要从系统中获取目录和文件,您可以选择两种方法之一 - 不能 100% 确定哪种方法更快,因此请对它们进行测试。我将把答案分成几 block ,这样你就可以把它拼凑成最合适的:

第 1 部分:初始化

import os
import sys

try:
searchpath = sys.argv[1]
except IndexError:
print 'No searchpath supplied'
sys.exit(0)

basepath, searchname = os.path.split(searchpath)

第 02 部分:收集文件夹和文件

选项 #1:os.listdir + os.path.isfile

files   = []
folders = []
for filepath in os.listdir(basepath):
if ( os.path.isfile(filepath) ):
files.append(filepath)
else:
folders.append(folder)

选项 #2:os.walk

# we only want the top level list of folders and files,
# so break out of the loop after the first result
for basepath, folders, files in os.walk(basepath):
break

第 3 部分:计算指数

选项 #1:不排序 - 你从系统中得到的就是你得到的

# no sorting
try:
index = len(folders) + files.index(searchname)
except IndexError:
index = -1

选项 #2:字母数字排序

# sort alpha-numerically (only need to sort the files)
try:
index = len(folders) + sorted(files).index(searchname)
except IndexError:
index = -1

选项 #3:自然排序

# natural sort using the projex.sorting.natural method
import projex.sorting
sorted_files = sorted(files, projex.sorting.natural)
try:
index = len(folders) + sorted_files.index(searchname)
except IndexError:
index = -1

第 4 部分:记录结果

# if wanting a 1-based answer
index += 1
print index

我不打算详细介绍自然排序,因为这不是问题的一部分 - 我认为这里还有其他论坛,您可以找到这方面的建议。 projex.sorting 模块是我编写的,可在此处获取:http://dev.projexsoftware.com/projects/projex如果您想查看它的确切实现。

我只想说这将是结果的不同:

>>> import pprint, projex.sorting
>>> files = ['test2.png', 'test1.png', 'test10.png', 'test5.png', 'test11.png']
>>> print files.index('test10.png')
2
>>> print sorted(files).index('test10.png')
1
>>> print sorted(files, projex.sorting.natural).index('test10.png')
3
>>> print files
['test2.png', 'test1.png', 'test10.png', 'test5.png', 'test11.png']
>>> print sorted(files)
['test1.png', 'test10.png', 'test11.png', 'test2.png', 'test5.png']
>>> print sorted(files, projex.sorting.natural)
['test1.png', 'test2.png', 'test5.png', 'test10.png', 'test11.png']

因此,在使用它时请牢记这一点。

干杯!

关于python - 如何获取文件夹中文件的序号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11782109/

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