【问题标题】:Set order using glob.glob使用 glob.glob 设置顺序
【发布时间】:2019-01-07 08:16:12
【问题描述】:

我想在我的脚本打开文件时设置自己的顺序,但 glob.glob 默认打开文件是随机的。

我有以下文件:'fish.txt'、'expo.txt'、'random.txt'。

这是我所有文件的小规模示例,我想设置我的顺序。

我已经写好了用 glob.glob 打开文件的正常方法

#! /usr/bin/env python
import sys, os, glob
mylist = ['fish.txt','random.txt', 'expo.txt']
def sorter(item):
    for item in mylist:
        return item

for file in sorted(glob.glob('*.txt'), key = sorter):
     print(file)

我想要的输出是:

鱼.txt

random.txt

expo.txt

【问题讨论】:

  • 您希望如何设置订单?排序了吗?

标签: python function sorting glob


【解决方案1】:

您可以使用sorted(list) 对文件名进行排序,然后再对其进行迭代:

#!/usr/bin/env python
import sys, os, glob

def sorter(item):
    """Get an item from the list (one-by-one) and return a score for that item."""
    return item[1]

files = sorted(glob.glob('*.txt'), key=sorter)
for file in files:
     print(file)

在这里,它按文件名中的第二个字母排序。将sorter() 函数更改为您想要的文件列表排序方式。

要按字母顺序排序,您不需要 key=sorter 部分,因为这是带有字符串列表的 sorted() 的默认行为。那么它会变成:

files = sorted(glob.glob('*.txt'))
for file in files:
     print(file)

【讨论】:

  • 为什么要按第二个字符排序..?
  • 这只是一个例子。您应该将 sorter() 函数更改为您希望如何对文件进行排序的算法。如果只想按字母顺序排序,可以省略key=sorter 部分。
  • @BlackBear,谢谢! .你能帮我完成剧本吗?我有这个(它不起作用): def sorter(item): for item in mylist: return item。我按照我想要的顺序创建了 mylist []
  • sorter() 函数在每次调用时接收一项(在本例中为一个文件名),而不是整个列表。所以按字母顺序排序,它只会返回文件名,这就是为什么你可以从sorted(...)函数调用中省略key=sorter。
  • @user8181134 我不想按字母顺序排序,但我想输入自己的顺序。这就是我按预期顺序创建 myList = [] 的原因。我的想法是,如果我读取 myList 的每个值,每个值将按照它们在列表中出现的顺序被读取。
【解决方案2】:

您可以对 glob 中的条目进行排序。您可以使用默认排序或选择您自己的算法:

简单用法:

#! /usr/bin/env python
import sys, os, glob

for file in sorted(glob.glob('*.txt')):
     print(file)

'排序'手册: https://python-reference.readthedocs.io/en/latest/docs/functions/sorted.html

【讨论】:

  • 你想要的排序逻辑是什么?您需要在上面的“def sorter()”中实现该逻辑 - 它当前以与收到的相同顺序返回项目。
  • 谢谢!,我的问题与根据我创建的列表的顺序设置我自己的顺序更相关。有意义吗?
【解决方案3】:

您可以使用lambda function 和sorted(list) 来设计您的自定义排序方法。

mylist = ['fish.txt','random.txt', 'expo.txt']
mylist2 = sorted(mylist, key = lambda x: x[-6:-5])
print(mylist2)

#output:
#['random.txt', 'expo.txt', 'fish.txt']

这将根据字符串的自定义参数对列表进行排序。这将使用第 6 个字符进行排序。

glob.glob() 会给你列表,你可以轻松实现。

用于从一个文件夹中读取多个图像。如果您的文件名顺序如下:files0.txt、file1.txt、file10.txt、file100.txt、file2.txt 那么

sorted(mylist, key = lambda x: x[4:-4]) will help you.

您需要存储 sorted() 函数的值。

【讨论】:

    猜你喜欢
    • 2012-03-28
    • 1970-01-01
    • 1970-01-01
    • 2019-07-06
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多