当前位置: 首页 > 知识库问答 >
问题:

逐行逐字段读取txt文件

唐健
2023-03-14

我正在努力阅读附加的TXT文件,以csv形式显示从文件中读取的每个字段,我做了一个接近我想要的代码,但我没有前进。

TXT文件格式:

    COMPANY TEST OF BRAZIL-        Junho/2022 Horista
      37-6  WALTER WHITE DA SILVA                 
         1006136-9   MOTORISTA            A33 1     00011523            


001 Hrs Normais Diurnas           183,333    2.555,66 +
031 Hrs Dsr Vencimento             36,667      511,14 +
037 Dsr Adicionais                             306,36 +
053 Reembolso de Vale Transpo                   47,61 +
102 Hrs Extras  ( 60%)             68,680    1.531,84 +
824 Vale Transporte                            500,00 +
290 Alimentacao Funcionario                                   10,50 -
404 Adiantamento Normal Desco                              1.011,95 -
476 Desconto Seconci Dependen                                 65,46 -
511 Inss Normal                                              522,87 -
561 Irf Normal                                                90,07 -
567 Irf Recol Adto                                           214,77 -
820 Desc de Vale Transporte                                  184,00 - 
 
                                             5.452,61+      2.099,62-
                                                  
                                                            3.352,99

       13,94      4.905,00      4.905,00       392,40      2.965,82


 COMPANY TEST OF BRAZIL-        Junho/2022 Horista
     102-0  WILTON PEATER TEMPLATE               
           31022-0   L EQUIPE B           000 1     00011524            


001 Hrs Normais Diurnas           183,333    2.220,16 +
031 Hrs Dsr Vencimento             36,667      444,04 +
037 Dsr Adicionais                             225,77 +
053 Reembolso de Vale Transpo                   26,40 +
102 Hrs Extras  ( 60%)             58,260    1.128,85 +
290 Alimentacao Funcionario                                   10,50 -
404 Adiantamento Normal Desco                                854,04 -
476 Desconto Seconci Dependen                                 98,19 -
511 Inss Normal                                              398,81 -
561 Irf Normal                                                48,77 -
567 Irf Recol Adto                                           211,64 -
820 Desc de Vale Transporte                                  159,85 -
 
 
 
 
 
                                             4.045,22+      1.781,80-
                                                  
                                                            2.263,42

       12,11      4.018,82      4.018,82       321,50      2.554,33

我的代码在我想要的位置读取第一行,但下面的行我不能,更不用说重复文件中包含的下一个工资单的读数了。

    # Read TXT
    
    with open ("I:input\\test.txt", "r") as ft:
        head_text = ft.readline()
    # Capturar campos
        ## Head
    competence = head_text[46:59]
    
    company = head_text[:45]
    
    print('competence',';','company')
    print(competence,';',company,)

目前的输出是这样的:

# competence;company
junho/2022; COMPANY TEST OF BRAZIL

出口应该是怎样的

# competence;company;id_employee;employe;etc...
junho/2022;COMPANY TEST OF BRAZIL;37-6;WALTER WHITE DA SILVA...
junho/2022;COMPANY TEST OF BRAZIL;102-0;WILTON PEATER TEMPLATE...

逐行读取和捕获数据,我必须完成一个工资单,它将在输出中形成一行,第二个工资单将在输出中形成第二行,因此,直到txt文件结束,此时我无法前进,我迷路了。

共有1个答案

云伯寅
2023-03-14

我认为您可以使用以下代码来获得所需的输出。您应该确保您的第一个数据是否具有类似的模板。如果需要编辑所需的输出,也可以编辑模板。请参阅代码:

!pip install ttp

from ttp import ttp
import json

with open ("test.txt", "r") as ft:
    data_to_parse = ft.read()

ttp_template = """
 {{Part_2|ORPHRASE}}-        {{Part_1}} {{ignore}}
     {{Part_3}}  {{Part_4|ORPHRASE}}
"""

def stack_test(data_to_parse):
    parser = ttp(data=data_to_parse, template=ttp_template)
    parser.parse()

    # print result in JSON format
    results = parser.result(format='json')[0]
    #print(results)

    #converting str to json. 
    result = json.loads(results)
    return(result)

# print(stack_test(data_to_parse))

for i in stack_test(data_to_parse)[0]:
    print(f"{i['Part_1']};{i['Part_2']};{i['Part_3']};{i['Part_4']}")

首先查看打印(i)输出:

另请参阅所需的输出:

 类似资料:
  • 我正在试着阅读我的文件的每一行,其中包含一个用户名列表,并用它创建一个登录系统。我正在尝试实现一个基本的登录系统,它的用户名存储在.txt文件中,但我的代码不工作,我不知道为什么。我认为问题出在检查用户名的循环中。 这是我的代码,但它不起作用,只是打印总是失败: 有什么想法吗?

  • 问题内容: 请看下面的代码 在这里,首先获取文件的字节,然后将其写入文本文件。然后,我阅读了该文本文件,逐行阅读,并为每一行生成了一个单独的.txt文件。现在,原始程序被拆分为数千个文件。现在,我需要阅读所有.txt文件并重新生成.txt文件。我不知道怎么做最后一件事。我怎样才能做到这一点?请帮忙! 问题答案: 如果要操作任何类型的文件,请不要认为它们包含文本数据,而应将它们视为包含字节的二进制文

  • 本文向大家介绍C#逐行读取txt文件的方法,包括了C#逐行读取txt文件的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了c#逐行读取txt文件的方法,是C#程序设计中非常实用的技巧,分享给大家供大家参考。 具体方法如下: 希望本文所述对大家C#程序设计的学习有所帮助。

  • 问题内容: 给定一个不太长的字符串,逐行读取字符串的最佳方法是什么? 我知道你可以做: 另一种方法是在eol上获取子字符串: 还有其他更简单的方法吗?我对上述方法没有任何问题,只是想知道你们中是否有人知道一些看起来更简单,更有效的方法? 问题答案: 您也可以使用String方法: 这使您可以方便地将所有行排列在一起。 我不知道拆分的性能。它使用正则表达式。

  • 问题内容: 我有一个.gz格式的文件。读取此文件的Java类是GZIPInputStream。但是,此类不会扩展Java的BufferedReader类。结果,我无法逐行读取文件。我需要这样的东西 尽管我创建了扩展java的Reader或BufferedReader类并使用GZIPInputStream作为其变量之一的类。 但是,这在我使用时不起作用 有人可以建议如何进行.. 问题答案: 装饰器的

  • 稳定性: 2 - 稳定的 require('readline') 模块提供了一个接口,用于从可读流(如 process.stdin)读取数据,每次读取一行。 它可以通过以下方式使用: const readline = require('readline'); 例子,readline 模块的基本用法: const readline = require('readline'); const rl