python合并两个属性_合并两个部分包含文件列表及其属性的最有效方法

我有一个系统,该系统运行带有ls或dir命令的变体的自定义cli,并返回工作目录中文件和文件夹的列表。

问题是,我可以使用带标志的命令运行命令,该标志返回文件及其时间戳(创建和最后修改的日期),或者返回一个标志返回文件及其文件大小。没有办法在一个cli命令中同时获得两者。

获取时间戳列表时,会进一步复杂化,仅返回一些文件(所有以某些前缀结尾的文件都被忽略了)。这两个列表均未按任何特定顺序排列。

我希望创建一个字典,在一个地方包含每个文件的所有信息。什么是最干净,最有效和最pythonic的方法?

快速数据样本:

dir -time给出506个元素的列表。只有(但不是全部)以.ts结尾的文件带有时间戳。某些文件显示在列表中,但没有时间戳,某些文件(例如以.index结尾的任何文件)根本不显示在列表中。

ch20prefix_20_182.ts 2014-10-22 16:06:20 - 2014-10-22 16:08:51

ch21prefix_21_40.ts 2014-10-14 16:15:42 - 2014-10-14 16:16:51

modinfo_sdk1.23b24L

bs780_ntplatency

ch10prefix_10_237.ts 2014-10-27 11:05:10 - 2014-10-27 11:07:33

ch10prefix_10_277.ts 2014-10-30 14:03:51 - 2014-10-30 14:04:24

video1_6_1.ts

ch11prefix_11_179.ts 2014-10-22 14:53:50 - 2014-10-22 14:56:00`

dir -size给出了967个元素的列表。所有文件都在此处,所有文件都有文件大小。

ch10prefix_10_340.index 159544

ch2prefix_2_705.ts 75958204

0

ch11prefix_11_148.ts 19877616

ch10prefix_10_310.ts 7373924

ch11prefix_11_111.index 17112

ch11prefix_11_278.index 1368

ch2prefix_2_307.ts 6492580

channelConfig.xml.2HD 18144

ch21prefix_21_220.ts 12893604

ch20prefix_20_128.index 1720

乱七八糟有一些押韵和原因,这就是为什么有些文件显示而另一些文件不显示,为什么有些文件带有时间戳而另一些文件没有的原因,但这与该问题无关。

我对如何处理它的想法:

我想要的最终输出是一个字典,每个键作为文件名,并且它的值是另一个字典,其中包含“创建时间”,“时间调制”和“文件大小”的键/值对。这样一来,您可以轻松查找每个文件的所有3条信息。

但是,对我来说困难的部分是找到一种有效的方法来合并每个列表中的数据。首先想到的是循环浏览较大的列表(文件大小),然后对于每个元素,检查它是否在较小的列表中,以及是否存在(并带有时间戳),然后添加数据。但这是非常低效的。尽管我事先知道的较大列表中的某些文件在其他列表中没有时间戳,但是对于所有没有时间戳的文件,我不能说。

列表未排序,但是我想到,如果按文件名排序,则可以采用一种更快的方式从另一个列表中查找每个文件,但是考虑到对列表进行排序的运行时间,值得付出努力。

那么,这里最有效的方法是什么?我主要关心运行时和可读性,但是欢迎在我处理该问题的方式中纳入其他因素。

解决方案

从您的问题很难说出您想要的结果是什么。如果您想要两个列表中的所有文件,即使它们仅出现在一个或另一个列表中,则只需对两个文件进行一次遍历,然后使用collections.defaultdict

from collections import defaultdict

d = defaultdict(dict)

with open('fileA.txt') as f:

for line in f:

name, time = line[:24], line[24:]

name, time = name.strip(), time.strip()

time_created, time_modified = time.split(' - ')

d[name]['time_created'] = time_created

d[name]['time_modified'] = time_modified

with open('fileB.txt') as f:

for line in f:

name, size = line[:24], line[24:]

name, size = name.strip(), size.strip()

d[name]['size'] = size

如果最终结果仅包括两个列表中都出现的文件,则对每个列表进行一次遍历以构造单独的词典。

dA = defaultdict(dict)

dB = defaultdict(dict)

with open('fileA.txt') as f:

for line in f:

name, time = line[:24], line[24:]

name, time = name.strip(), time.strip()

try:

time_created, time_modified = time.split(' - ')

except ValueError:

time_created, time_modified = '', ''

dA[name]['time_created'] = time_created

dA[name]['time_modified'] = time_modified

with open('fileB.txt') as f:

for line in f:

name, size = line[:24], line[24:]

name, size = name.strip(), size.strip()

dB[name]['size'] = size

然后,通过其中一个字典,以创建具有公共键的第三个字典。

d = defaultdict(dict)

for k, v in dA.items():

if k in dB:

d[k] = v

d[k].update(dB[k])

由于这是迄今为止唯一的解决方案,并且@Brian C没有提供解决方案,因此这必须是最有效的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/487521.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

格力入局的数控机床,掌握“核心科技”有多难?

来源:脑极体梦想还是要有的,万一要实现了呢?即便不能马上实现,坚持努力也是可以的。2016年,在格力主办的“第二届中国制造高峰论坛”上,董明珠曾放出这样的豪言壮语:两年后,做出最顶…

C#AE创建FeatureDataset/创建数据、集要素集

核心代码 1 IWorkspaceFactory pFactory new AccessWorkspaceFactoryClass();//这里需要在program.cs中添加desktop绑定 2 IWorkspace pWorkspace pFactory.OpenFromFile(temMDBpath, 0);//这里要求具备axLiscense,可以添加控件添加或代码添加 3…

留言板asp mysql_ASP简单入门(制作一个简单的留言板 )

语句……%><2>定义变量dim语句dim a,ba10b”ok!”%>注意&#xff1a;定义的变量可以是数值型&#xff0c;也可以是字符或者其他类型的<3>简单的控制流程语句1. If 条件1 then语句1elseif 条件2 then语句2else语句3endif2.while 条件语句wend3.for count1 to …

深度解析:国产化软硬件全景梳理

本文来源&#xff1a;信创研究框架作者&#xff1a;谢春生、郭雅丽、郭梁良、金兴内容包括产业概括&#xff0c;发展背景、推进节奏和产业全景图&#xff0c;云计算全栈架构、产业链全景图。核心技术&#xff0c;CPU处理器、操作系统、中间件、办公套件、安全保密等。芯片处理器…

适配器模式(类适配器)

java设计模式大体分为23种设计模式&#xff0c;直接通过例子学习设计模式&#xff0c;更易于理解和思考其中的原理和作用&#xff0c;以下给出 适配器模式 的第一种(一个有三种)的demo&#xff0c;叫做类适配器模式&#xff1a; MainRun.java类&#xff0c;是程序运行入口&…

空间连接时计算总和_学习CALCULATE函数(六)丨帕累托之累计求和

(写在前面的话&#xff1a;非常感谢韭菜大神和冬神的指点&#xff0c;万分感谢。)哎&#xff0c;说归说&#xff0c;还是需要继续学习CALCULATE函数&#xff0c;也是蛮无奈的。最近白茶在研究帕累托分析法&#xff0c;本期分享一下帕累托ABC分析法的基础——累计求和。这里简要…

揭秘仿人机器人背后的技术秘密 | 优必选研究院技术专家刘益彰【附PPT】

来源&#xff1a;机器人大讲堂机器人大讲堂直播间037期目前国际上主要有两种控制方式的仿人机器人&#xff1a;一种是基于位置控制的仿人机器人&#xff0c;另一种是基于力矩控制的仿人机器人。由于类人运动的功能的多样性、复杂性以及高维度性&#xff0c;所以仿人机器人的研究…

luoguP1463:反素数ant(打表心得☆)

题目描述对于任何正整数x&#xff0c;其约数的个数记作g(x)。例如g(1)1、g(6)4。如果某个正整数x满足&#xff1a;g(x)>g(i) 0<i<x&#xff0c;则称x为反质数。例如&#xff0c;整数1&#xff0c;2&#xff0c;4&#xff0c;6等都是反质数。现在给定一个数N&#xff0…

席南华院士:数学的意义

本文转自返朴公众号2020年5月30日&#xff0c;中国科学院院士、中国科学院数学与系统科学研究院研究员席南华受邀作远程报告“数学的意义”&#xff0c;从数学的发展史、数学的特性、数学巨匠的一些观点以及数学美的含义等多个角度讲述了数学的意义。本文为报告文字整理版&…

java简单小项目_Java简易抽奖系统小项目

本文实例为大家分享了Java简易抽奖系统的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下需求&#xff1a;实现一个抽奖系统1 注册2 登录3 抽奖必须先注册 再登陆 再抽奖随机产生4个随机数作为幸运卡号用户注册后 登录的时候 用户名密码输入判断只有三次机会需要做…

2017-9-26 NOIP模拟赛

NOIP 2017 全真模拟冲刺 ---LRH&&XXY 题目名称 那些年 铁路计划 毁灭 题目类型 传统 传统 传统 可执行文件名 years trainfare destroy 输入文件名 years.in trainfare.in d…

protobuf java any_protobuf3笔记

Protobuf3笔记文件后缀定义Proto的文件应以.proto为后缀。语法版本Proto文件的首行应指定语法版本&#xff1a;syntax "proto3"; // "proto2"定义字段在消息中&#xff0c;每个字段以下列方式定义&#xff1a;type filed "" tag ";"如…

108页报告一文看懂光刻机,看国产替代如何破局【附下载】

来源&#xff1a;方正证券光刻机是人类文明的智慧结晶&#xff0c;被誉为半导体工业皇冠上的明珠。光刻机作为前道工艺七大设备之首&#xff0c;价值含量极大&#xff0c;在制造设备投资额中单项占比高达23%&#xff0c;技术要求极高&#xff0c;涉及精密光学、精密运动、高精度…

【bzoj 3601】一个人的数论 (莫比乌斯反演+伯努利数)

题解&#xff1a; &#xff08;吐槽&#xff1a;网上题解那个不严谨猜测真是没谁了……关键是还猜得辣么准……&#xff09; 直接化简到求和那一段&#xff1a; $f_{d}(n)\sum_{t|n}\mu(t)t^{d}\sum_{i1}^{\frac{n}{t}}i^{d}$ $设S_{d}(T)\sum_{i1}^{T}i^{d}$ 那这个是什么呢&a…

院士论坛|李德仁:测绘遥感与智能驾驶

来源&#xff1a;测绘学报未来智能实验室的主要工作包括&#xff1a;建立AI智能系统智商评测体系&#xff0c;开展世界人工智能智商评测&#xff1b;开展互联网&#xff08;城市&#xff09;云脑研究计划&#xff0c;构建互联网&#xff08;城市&#xff09;云脑技术和企业图谱…

ansible编译httpd playbook示例

以下是playbook的内容。它的处理流程是&#xff1a; 1.先在本地下载apr,apr-util,httpd共3个.tar.gz文件。 2.解压这3个文件。 3.安装pcre和pcre-devel依赖包。 4.编译安装apr。 5.编译安装apr-util。 6.编译安装httpd。 ---- hosts: alltasks: - name: download apr,apr-util,…

java jquery post_jquery js post变量set和get for post

我需要从php页面发送一些参数到另一个动态发布电子邮件&#xff0c;如果我发送硬编码的值是好的&#xff0c;但如果我在文本字段上发送值&#xff0c;它不起作用&#xff0c;这里的代码请求发送邮件的页面$otroYa other.val();console.log (other.val()); //shows value ok of…

深度报告:一文看懂生物芯片产业

来源&#xff1a;赛迪顾问生物芯片技术起源于二十世纪八十年代&#xff0c;也被称为“微流控技术”、“芯片实验室”等。生物芯片技术能够在邮票大小的芯片上&#xff0c;进行较为复杂的生物、化学、物理等实验&#xff0c;为制作成本低、样本少、时间短、操作简单的医疗仪器提…

java 设计模式 优缺点_java设计模式2:原型模式(机制\优缺点分析\使用场景)...

1、 原型模式实现机制原型模式在设计模式中相对比较简单&#xff0c;它直接通过实现 Cloneable接口&#xff0c;再重写 clone()方法返回想要的对象就OK 了。一起来看下代码 &#xff1a;public class ProtoType implements Cloneable {public ProtoType(){System.out.println(&…

人机融合的难点

来源&#xff1a;人机与认知实验室【一个深度态势感知者的周围充满了各种各样的暗示和提醒。】“我小时候读过很多科幻小说。其中一个最常见的主题是“人与机器”&#xff0c;它经常以机器人的形式变得自我意识和威胁人类。这一主题也成为了《终结者》和《黑客帝国》等好莱坞电…