通过Python从.txt文件中给定的行创建元组

如何解决通过Python从.txt文件中给定的行创建元组

以下是文件listing.txt中的行,该文件包含多个文件的列表,每个文件一行:

-rwxr-xr-x 1 jttoivon hyad-all    2356 Dec 11 11:50 add_colab_link.py
-rw-r--r-- 1 jttoivon hyad-all  164519 Dec 28 17:59 basics.ipynb
-rw-r--r-- 1 jttoivon hyad-all  164477 Nov  5 19:21 basics.ipynb.orig
-rw-r--r-- 1 jttoivon hyad-all  115587 Dec 11 11:50 bayes.ipynb
drwxr-xr-x 4 jttoivon hyad-all    4096 Nov 29 13:07 _build
-rw-r--r-- 1 jttoivon hyad-all  198820 Dec 11 11:50 clustering.ipynb
-rw-r--r-- 1 jttoivon hyad-all    6647 Dec 11 12:20 conf.py
-rw-r--r-- 1 jttoivon hyad-all   41828 Nov 28 13:26 example_figure2.png
-rw-r--r-- 1 jttoivon hyad-all  125079 Nov 28 13:26 example_figure2.xcf
-rw-r--r-- 1 jttoivon hyad-all   24139 Nov 28 12:03 example_figure.png
-rwxr-xr-x 1 jttoivon hyad-all     650 Nov 28 12:03 example_figure.py
-rw-r--r-- 1 jttoivon hyad-all   25399 Nov  2 21:25 exception_hierarchy.pdf
-rw-r--r-- 1 jttoivon hyad-all   43632 Nov  2 22:05 exception_hierarchy.png
-rw-r--r-- 1 jttoivon hyad-all   24366 Nov  2 21:26 exception_hierarchy.svg
-rw------- 1 jttoivon hyad-all   72095 Oct  3 17:36 extra.ipynb
-rw------- 1 jttoivon hyad-all 1207075 Nov 28 16:02 face.png
-rwxr--r-- 1 jttoivon hyad-all     897 Nov 12 10:59 generate_contents.py
drwx------ 8 jttoivon hyad-all    4096 Dec 27 13:55 .git
-rw-r--r-- 1 jttoivon hyad-all      19 Dec 10 10:24 .gitignore
-rw-r--r-- 1 jttoivon hyad-all  890349 Dec 11 11:50 image_processing.ipynb
-rw------- 1 jttoivon hyad-all     689 Dec 10 10:28 index.rst
-rw-r--r-- 1 jttoivon hyad-all    5254 Nov  3 18:46 inheritance_hierarchy.pdf
-rw-r--r-- 1 jttoivon hyad-all    7271 Nov  3 18:46 inheritance_hierarchy.svg
-rw-r--r-- 1 jttoivon hyad-all    4091 Dec 11 11:50 instructions.ipynb
drwx------ 2 jttoivon hyad-all    4096 Nov 30 14:13 .ipynb_checkpoints
-rw-r--r-- 1 jttoivon hyad-all   54011 Dec 11 11:50 linear_regression.ipynb
-rw------- 1 jttoivon hyad-all     620 Nov  1 11:44 Makefile
-rw-r--r-- 1 jttoivon hyad-all   52191 Dec 11 11:50 matplotlib.ipynb
-rw------- 1 jttoivon hyad-all    1920 Nov 30 11:37 notes.ipynb
-rw-r--r-- 1 jttoivon hyad-all   82564 Dec 11 11:50 numpy.ipynb
-rw-r--r-- 1 jttoivon hyad-all   10201 Nov  3 16:36 package.pdf
-rw-r--r-- 1 jttoivon hyad-all    5742 Nov  3 16:37 package.svg
-rw-r--r-- 1 jttoivon hyad-all  913641 Nov 26 10:58 painting.png
-rw-r--r-- 1 jttoivon hyad-all  348531 Dec 28 13:40 pandas.ipynb
-rw-r--r-- 1 jttoivon hyad-all  100697 Dec 11 11:50 pca.ipynb
-rw------- 1 jttoivon hyad-all   32451 Oct  5 19:21 Python-basic-elements.ipynb
-rw------- 1 jttoivon hyad-all      82 Nov 13 12:55 requirements.txt
-rw------- 1 jttoivon hyad-all      81 Nov 13 12:44 requirements.txt.old
-rw-r--r-- 1 jttoivon hyad-all    2836 Nov 12 10:58 sisallys.ipynb
-rw------- 1 jttoivon hyad-all  128194 Nov 23 12:58 testing.ipynb
-rw-r--r-- 1 jttoivon hyad-all     691 Nov 29 16:27 .travis.yml
-rw-r--r-- 1 jttoivon hyad-all     973 Oct 31 14:01 typing1.fig
-rw-r--r-- 1 jttoivon hyad-all    3747 Oct 31 14:01 typing1.svg
-rw-r--r-- 1 jttoivon hyad-all    1093 Oct 31 14:01 typing2.fig
-rw-r--r-- 1 jttoivon hyad-all    4053 Oct 31 14:02 typing2.svg
-rw-r--r-- 1 jttoivon hyad-all   12220 Oct 31 14:07 typing.svg
-rwx------ 1 jttoivon hyad-all     766 Oct 25 12:10 versions.py

每行包含某些字段:访问权限,引用数,所有者名称,所属组的名称,文件大小,日期,文件名。这些字段在一个或多个空格的帮助下分开;在这七个字段中也可能有空格。

我被要求编写函数file_listing来加载给定文件,并应使用一些正则表达式返回元组列表(大小,月份,日期,小时,分钟,文件名);我选择了findall方法。

我编写了以下代码:

import re

def file_listing(filename="src/listing.txt"):
    with open("src/listing.txt",mode='r') as f:
        for line in f:
            #print(line)
            d = re.findall('^(.*?)\s+(.*?)\s+(.*?)\s+(.*?)\s+(.*?)\s+(.*?)\s+(.*?)\s+(.*?)\s+(.*?)\s+',line)
            #print(d)
            for idx,item in enumerate(d):
                print(item[4:])
    return d

我不知道如何实施适当的搜索以从文件中获取行(25399,"Nov",2,21,25,"exception_hierarchy.pdf")的结果-rw-r--r-- 1 jttoivon hyad-all 25399 Nov 2 21:25 exception_hierarchy.pdf。到目前为止,它看起来如下:('25399','Nov','2','21:25','exception_hierarchy.pdf')。有什么办法解决挑战吗?

谢谢。

解决方法

我不建议在这里使用正则表达式。情况很清楚,每一行都有明确定义的格式。那么,为什么不简单地使用字符串的split()方法呢?

def result(line):
    tmp = line.split()
    return (
        int(tmp[4]),tmp[5],int(tmp[6]),int(tmp[7].split(":")[0]),int(tmp[7].split(":")[1]),tmp[8]
    )

line = '-rw-r--r-- 1 jttoivon hyad-all 25399 Nov 2 21:25 exception_hierarchy.pdf'

print(result(line))
# (25399,'Nov',2,21,25,'exception_hierarchy.pdf')

一种更合适的方法是将split()的结果解压缩到命名变量中,例如:

def result(line):
    permissions,hardlinks,owner_user,owner_group,filesize,month,day,time,filename = line.split()
    return (
        int(filesize),int(day),int(time.split(":")[0]),int(time.split(":")[1]),filename
    )

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 <select id="xxx"> SELECT di.id, di.name, di.work_type, di.updated... <where> <if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 <property name="dynamic.classpath" value="tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-