对 os.listdir 文件进行排序 Python

2024-05-15

如果已下载数年的数据,这些数据存储在具有以下命名约定的文件中:year_day.dat。例如,名为 2014_1.dat 的文件包含 2014 年 1 月 1 日的数据。我需要按天排序读取这些数据文件,2014_1.dat、2014_2.dat、2014_3.dat 直到年底。在按顺序列出的文件夹中,但是当我在目录中创建文件列表时,它们会重新排序2014_1.dat、2014_10.dat、2014_100.dat、2014_101.dat...2014.199.dat、2014_2.dat。 我想我需要使用排序功能,但是如何强制它按天对列出的文件进行排序,以便我可以继续处理它们? 这是到目前为止的代码:

import sys, os, gzip, fileinput, collections
# Set the input/output directories
wrkDir = "C:/LJBTemp"
inDir = wrkDir + "/Input"
outDir = wrkDir + "/Output"
# here we go
inList = os.listdir(inDir)  # List all the files in the 'Input' directory
print inList  #print to screen reveals 2014_1.dat.gz followed by 2014_10.dat.gz NOT    2014_2.dat.gz HELP
d = {}
for fileName in inList:     # Step through each input file 
    readFileName = inDir + "/" + fileName

    with gzip.open(readFileName, 'r') as f: #call built in utility to unzip file for reading
      for line in f:
          city, long, lat, elev, temp = line.split() #create dictionary
          d.setdefault(city, []).append(temp) #populate dictionary with city and associated temp data from each input file
          collections.OrderedDict(sorted(d.items(), key=lambda d: d[0])) # QUESTION? why doesn't this work
          #now collect and write to output file
outFileName = outDir + "/" + "1981_maxT.dat" #create output file in output directory with .dat extension
with open(outFileName, 'w') as f:
     for city, values in d.items():
        f.write('{} {}\n'.format(city, ' '.join(values)))

print "All done!!"
raw_input("Press <enter>") # this keeps the window open until you press "enter"

如果您不介意使用第三方库,您可以使用natsort https://github.com/SethMMorton/natsort库,正是针对这种情况而设计的。

import natsort
inList = natsort.natsorted(os.listdir(inDir))

这应该处理所有的数字排序,而不必担心细节。

您还可以使用ns.PATH使排序算法具有路径感知能力的选项:

from natsort import natsorted, ns
inList = natsorted(os.listdir(inDir), alg=ns.PATH)

完全公开,我是natsort author.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对 os.listdir 文件进行排序 Python 的相关文章

随机推荐

  • 为 Windows 98 编译 Qt

    我需要支持 Windows 98 Qt 文档声称这是可能的 但没有说明 Qt 4 6 的分布式二进制文件不能在 Win98 上运行 而且我采样的大多数 Qt 应用程序也不能在 Win98 上运行 对于几个确实在 98 上运行的应用程序 我询
  • 带路径压缩算法的加权 Quick-Union

    有一种 带路径压缩的加权快速联合 算法 代码 public class WeightedQU private int id private int iz public WeightedQU int N id new int N iz new
  • 动态创建和下载Doc文件

    因此 我尝试动态创建 doc 文件并让用户在单击按钮时下载该文件 这些是我找到的用于下载文件的标头 header Content Description File Transfer header Content Type applicati
  • paymentId 和 TRANSACTIONID 之间的区别

    我正在从 REST 转向经典 API 而且我对两者都是新手 作为一名开发人员 我想记录付款的唯一标识符 以便将网站中的销售与 Paypal 付款 ID 相关联 例如我想要退款时 REST API 曾经给我付款 ID https stacko
  • 如何将列中的天数添加到 DB2 中的当前日期?

    我正在编写此 SQL 来动态计算一定的天数 如下所示 但我不知道如何让它工作 因为我不断收到错误 select Current Date Dynamic numbr of days calculation here from TableNa
  • 使用一次递归调用实现递归

    给定一个函数如下 f n f n 1 f n 3 f n 4 f 0 1 f 1 2 f 2 3 f 3 4 我知道使用递归来实现它 并在一个函数内进行三个递归调用 但我想在函数内仅使用一次递归调用来完成此操作 怎样才能做到呢 要实现使用
  • DataGridView 使用 Structure 和 LINQ 来排序 txt 文件

    当我的程序出现问题时 我能够将所有数据拉入网格并进入正确的列 行 但是 我相信我的 LINQ 查询是错误的 它没有使第三列正确划分并插入正确的数据 我的结果 https gyazo com 0f307a10dff4c015a361708ec
  • 使用 Mock 对 Laravel 5 Mail 进行单元测试

    有没有办法在 Laravel 5 中测试 Mail 尝试了我在互联网上看到的唯一合法的模拟示例 但它似乎只适用于 Laravel 4 下面的当前代码 mock Mockery mock Swift Mailer this gt app ma
  • 反转js对象中的键值

    我不知道如何改变 first de second ab de third de to de first second third ab second 我想将唯一值与包含键的列表相关联 我尝试过的 但我认为我离它还很远 const data
  • 将具有值的产品属性添加到 Woocommerce 中的产品

    我正在使用此代码添加自定义属性 attributes array array name gt Size options gt array S L XL XXL position gt 1 visible gt 1 variation gt
  • 编码杂志[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • TensorFlow 相当于 PyTorch 的 Transforms.Normalize()

    我正在尝试推断最初在 PyTorch 中构建的 TFLite 模型 我一直在遵循PyTorch 实现 https github com leoxiaobin deep high resolution net pytorch blob 1ee
  • opc ua客户端到服务器

    我想知道是否可以将数据从 OPC UA 客户端发送到服务器 我有一台设置了 OPC UA 服务器的 Windows 10 PC 和一些 Raspberry Pi 作为客户端 我已经编写了 Python 代码来将数据从服务器发送到客户端 现在
  • C++,set_terminate 是每个线程本地的吗?

    Should set terminate get terminate在 C 2011 或 C 2003 中为多个线程设置不同的终止异常处理器 例如 如果我有程序并将终止处理程序设置为func 1 然后我启动3个线程 新线程中的终止处理程序是
  • PayPal 定期付款:如何添加初始付款。

    我一直在使用实现一个功能 可以使用 PayPal 进行定期付款 并发送此请求 复制自https developer paypal com webapps developer docs api create a plan https deve
  • 如何使 FirebaseAuth.AuthStateListener 在 Kotlin 中工作?

    class LoginActivity AppCompatActivity private val firebaseAuth FirebaseAuth getInstance private val firebaseAuthListener
  • 读取混合(即文本和二进制)数据的最佳方法是什么?

    我需要能够读取混合二进制和非二进制数据的文件格式 假设我知道输入是好的 那么最好的方法是什么 作为示例 我们以一个文件为例 该文件的第一行是 double 换行符 0x0D 0x0A 后面是十个字节的二进制数据 当然 我可以计算换行符的位置
  • 如何查询集成服务目录

    问题 识别连接到 SQL Server 上特定数据库表的所有 SSIS 包 详细信息 服务器上部署了近 100 个包 大多数包的大小都很大 因此很难以高精度手动检查它们 有没有一种快速且自动化的方法来做到这一点 使用 SQL Server
  • java中监视目录变化

    我正在使用 WatchService 来监视目录中的更改 特别是目录中新文件的创建 下面是我的代码 package watcher import java nio file import static java nio file Stand
  • 对 os.listdir 文件进行排序 Python

    如果已下载数年的数据 这些数据存储在具有以下命名约定的文件中 year day dat 例如 名为 2014 1 dat 的文件包含 2014 年 1 月 1 日的数据 我需要按天排序读取这些数据文件 2014 1 dat 2014 2 d