`
datamachine
  • 浏览: 163488 次
社区版块
存档分类
最新评论

如何从文本文件中批量抽取数据

阅读更多

在进行文本处理时,有时候需要从多级目录的多个文件中取出某些数据。命令行难以处理较复杂的过程,而高级语言虽然可以实现这种算法,但代码比较难写,再加上可能存在大文件,处理起来会更加困难。集算器支持游标读取大文件、脚本递归调用,易于实现批量文件处理,下面通过例子来看一下具体作法。

 

目录“D:\files”包含多级子目录,每个目录下都有许多文本格式的文件,从这些文件中读取指定的行(比如第二行),并将这些数据写入新的文件result.txt。目录D:\files的部分结构如下:



   
集算器代码:




  
首先定义一个参数path,初始值设为“D:\files”,这样就可以从该目录开始抽取数据。如下图:



   
A1=directory@p(path)

函数directory用来读出参数path中根目录的文件列表,选项@p表示文件名带全路径,部分结果如下:



  
A2=A1.(file(~).cursor@s())

这句代码用来以游标的方式依次打开A1中的文件。A1.(…)表示对A1的成员依次进行计算,~用来表示当前成员,函数file用来建立文件对象,函数cursor表示根据文件对象返回游标对象。

函数cursor的默认分隔符是tab,默认列名是_1,_2…_n,选项@s表示忽略分割符并将文件内容读成单列字符串,列名是_1。值得注意的是,这句代码只是建立游标对象,并没有读入数据,实际的读入动作会在遇到函数fetch时触发。A2的计算结果如下:



  
A3=A2.((~.skip(1),~.fetch@x(1)))

这句代码可以从A2的每个文件游标中读取第二行。A2.(…)表示对A2中的每个游标依次计算,(~.skip(1),~.fetch@x(1))表示依次计算括号内的表达式,并返回最后一个表达式的结果。其中~.skip(1)表示跳过一行,~.fetch@x(1)表示从当前位置读取一行(即第二条)并关闭游标,选项@x表示取完数据后自动关闭游标,~.fetch@x(1)就是括号运算符要返回的结果。

函数skip可以跳过多行,也可以通过参数来决定需要跳过几行。函数fetch也可以取出多行,比如从第10行开始取2行,可以写作~.skip(10),fetch@x(2)

A3的部分计算结果如下:



  
A4=A3.union()

这句代码将A3的计算结果合并。函数union执行并集操作,比如对两个集合[1,2][2,3]计算并集,代码是[12],[2,3]].union()结果等于[1,2,3]函数union会去除重复数据,如果想保留重复,应该使用函数conj(也叫合集)。A4的部分结果如下:



  
A5=file("d:\\result.txt").export@a(A4)

这句代码用来A4追加到result.txt中。函数export执行写文件操作,选项a表示追加。

上述A1-A5已经完成了当前目录里文件的抽取,下面只要取出当前目录的子目录,并递归调用本脚本即可。

 

A6=directory@dp(path)

函数directory可以取出当前目录的所有子目录,选项d表示取目录名,选项p表示取全路径。对于目录D:\filesA6的计算结果如下:



  
A7=A6.(call("c:\\readfile.dfx",~))

这句代码依次对A6中的成员(各子目录)进行计算,算法是:调用集算器脚本c:\\readfile.dfx,并将当前成员(子目录)作为入口参数。注意:readfile.dfx就是本脚本的文件名。

通过A7的递归调用,集算器就可以对D:\files下的多级目录进行批量抽取,打开result.txt可以看到最终计算结果:



 

  • 大小: 38.8 KB
  • 大小: 28.3 KB
  • 大小: 29.3 KB
  • 大小: 21.1 KB
  • 大小: 30.5 KB
  • 大小: 39.4 KB
  • 大小: 31.4 KB
  • 大小: 5.7 KB
  • 大小: 79.5 KB
0
0
分享到:
评论
1 楼 LinApex 2015-01-28  
啥鬼东西?????

相关推荐

    PowerGrep文本批量抽取工具

    【PowerGrep文本批量抽取工具】是一款高效且功能强大的语料库处理软件,它专为需要处理大量文本数据的用户设计。在IT行业中,尤其是在数据分析、自然语言处理(NLP)、文档管理和信息检索等领域,PowerGrep发挥着至...

    文本挖掘所需的批量文本

    主题建模,如潜在狄利克雷分配(LDA),能帮助我们发现文本数据中的隐藏主题。通过对每个文档分配主题概率,我们可以了解不同类别下文本的主要关注点。 除此之外,网络爬虫技术可以用于获取更多的文本数据,以扩大...

    Python 文本文件内容批量抽取实例

    在Python编程中,文本文件内容的批量抽取是一个常见的任务,特别是在数据分析、日志处理和文本挖掘等场景。本文将详细讲解如何使用Python实现这个功能,通过一个具体的实例来阐述整个过程。 首先,我们要理解原始...

    (1)Kettle数据抽取---全量抽取

    在本例中,我们选择“表输入”控件,因为我们需要从一个数据库表中抽取数据。双击“表输入”控件,打开配置选项,新建一个数据库连接,输入数据库相关信息,并测试连接,成功返回 OK。 1.2 配置数据库连接 在配置...

    kettle批量解析多个xml文件

    通过以上步骤,Kettle可以高效地批量解析XML文件并导入到Oracle数据库,满足生产环境中的数据处理需求。在实际应用中,还需要根据具体业务逻辑调整和优化这些步骤,确保数据质量并提高处理效率。

    使用kettle将文本文件导入到数据库

    一个简单的例子,使用kettle将文本文件导入到数据库

    PDF 文本抽取 (Kettle 插件)

    这个kettle 的插件,它可以从一个或多个 PDF 文件中抽取文本内容,抽取后的文本一页作为一行记录,便于后续处理,如写入数据库等等。 帮助手册 http://www.xgndata.com/resources/kettle/PFR_UserGuide_zh_CN.pdf ...

    Oracle中批量数据迁移的实现方案.pdf

    在实际应用中,假设我们需要定期从Oracle数据库中抽取大量数据形成文本文件,并确保每个文件小于2GB。这可以通过设计一个程序来实现,该程序会根据预定义的抽取规则和时间间隔自动执行,每次抽取一个任务,直到所有...

    kettle批量数据库操作流程脚本

    在"Kettle批量数据库操作流程脚本"中,我们主要讨论的是如何利用Kettle进行多源数据抽取并整合到单一目标数据库的过程。这个过程通常涉及到以下几个关键步骤: 1. **数据源定义**:在Kettle中,数据源可以是各种...

    任意关系数据库sql查询转换成CSV文本文件

    如果想支持不同的数据库,可以将不同的jdbc的jar放到lib文件夹中,按照README文件指引配置好后,运行start.bat即可按照配置批量抽取数据库中的数据保存到本地,字符集为UTF-8,纯JAVA开发,只要合理配置字符集导出...

    亿彩文件批量改名精灵 v1.0.rar

    本工具软件除提供了常见的文件批量更名功能如添加、删除、替换、对调、数字递增、改扩展名等多种丰富的功能外,还提供了其他特有的强大的文件批量更名功能,比如: 支持word通配符和正则表达式的更名功能 支持汉字...

    odu数据文件读取

    ODU是Oracle提供的一款实用程序,用于从Oracle数据库中导出数据到文本文件,或者将这些文本文件重新导入回数据库。这在数据迁移、备份、分析或数据清洗等场景中非常常见。 描述中的“oracle 源文件数据读取工具”...

    Python批量提取中英文混排中英文文本.zip

    本文将深入探讨如何使用Python编程语言来批量提取中英文混排文本中的英文文本,以此针对给定的文件"Python批量提取中英文混排中英文文本.zip"进行解析。 首先,我们需要了解Python中的字符串处理功能。Python提供了...

    提取LT6文件数据.zip_提取lt6文件

    在MATLAB中,`.m`文件是可执行的脚本或函数,这可能是一个自定义函数,用于解析LT6文件的特定部分,例如读取和处理与轨迹相关的数据,然后将结果保存为文本文件。 2. `extract.m`:这是另一个数据提取脚本。它可能...

    隔行提取_隔行提取_隔行matlab_套取数据_提取数据matlab_

    这个场景描述了如何利用MATLAB从一个名为"1.txt"的文本文件中读取数据,然后按照特定规则(在这里是隔行)进行提取,并将结果保存到新的文件"2.txt"中。下面我们将详细介绍这一过程中的关键知识点。 1. **文本文件...

    tika提取文本内容

    Tika的核心功能是内容提取,这意味着它可以从不同类型的文件中抽取纯文本,这对于搜索引擎索引、数据分析、内容分析和文本挖掘等工作非常有用。以下是一些关于Tika的重要知识点: 1. **MIME类型识别**:Tika通过...

    G4数据导出保存简明方法 1

    除了文本文件,还可以考虑使用数据库或者更高级的数据存储格式(如HDF5)来存储数据,以支持更大的数据量和更复杂的数据结构。 8. **调试与日志**: 这种数据导出方式也适用于生成调试日志,帮助开发者理解模拟...

    ETL数据整合与处理(Kettle)教案.rar

    ETL(Extract, Transform, Load)是数据仓库系统中的关键环节,负责从不同源头抽取数据、转换数据格式并加载到目标系统中。Kettle作为一款强大的ETL工具,因其易用性、灵活性和高效性而广受欢迎。本教程将深入探讨...

    信息化频道_ETL(数据抽取).mht

    1. **数据抽取**:这是ETL的第一步,涉及从各种来源(例如关系数据库、文本文件、API等)获取数据。数据抽取工具能够按照预定的频率或事件触发,自动抓取所需的数据,并确保数据的完整性和一致性。 2. **数据清洗**...

Global site tag (gtag.js) - Google Analytics