使用python将fwf文本解析为.csv以与excel一起使用

2024-10-03 02:35:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个固定的文本文件,可以运行到50000行左右:

 RECORD TRANSACTN       SEQUENCE    CR      R/T          ACCOUNT RSN               ITEM           ITEM CHN          USER    REASO
    NBR       NBR       OR PIC NBR  DB      NBR              NBR COD             AMOUNT         SERIAL IND  .......FIELD..  DESCR
  5,556        01        7450282689 C 538196640        9835177743 15          $9,064.81              00                    CREDIT
  5,557        01        7450282690 D 031301422         362313705 38            $592.35           43431                    DR CR
  5,558        01        7450282691 D 021309379         601298839 38          $1,491.04           44896                    DR CR
  5,559        01        7450282692 D 071108834            176885 38          $6,688.00            1454                    DR CR
  5,560        01        7450282693 D 031309123     1390001566241 38            $293.42            6878                    DR CR

 ************************************************************************************************************************************
 *                                                                                                                                  *
 *                                              PPPPPP  DDDDDD   CCCCC  K     K  #   #                                              *
 *                                              P     P D     D C     C K   K   #######                                             *
 *                                              P     P D     D C       K K      #   #                                              *
 *                                              PPPPPP  D     D C       KK       #   #                                              *
 *                                              P       D     D C       K K      #   #                                              *
 *                                              P       D     D C     C K   K   #######                                             *
 *                                              P       DDDDDD   CCCCC  K     K  #   #                                              *
 *                                                                                                                                  *
 *                                                                                                                                  *
 * START ******************************************************************************************************************** START *
 * START ******************************************************************************************************************** START *
 * START ******************************************************************************************************************** START *

在整个文件中,这些行的分组之间有随机的行制动器和头信息。我只关心包含字母“C”的行,并且只关心第3列的前两个数字是74。每个值都在它自己的单元格中,但由于我在拼接方面的不同尝试,最终的产品看起来一团糟。我在csv模块中为第一行编写了头文件,但它们下面的实际数据看起来像python抛出的。你知道吗

到目前为止,我已经尝试在csv模块中进行拼接,并使用str.find公司(str,beg,end)。我觉得我找到的解决方案对特定问题有效,但我无法将它们最终转化为一个可行的代码。你知道吗

任何帮助都将不胜感激。你知道吗

编辑:到目前为止,我在csv/codecs模块中的代码是

import codecs
import csv


with codecs.open(r'C:\Users\John\Documents\ATM project\PDCKCR09R009_2017-08-03_1115.txt') as f, open('output.csv', 'w') as fout:
    writer = csv.writer(fout)
    writer.writerow([ 'TRANSACTN_NBR', 'RECORD_NBR', 
        'SEQUENCE_OR_PIC_NBR', 'CR_DB', 'RT_NBR', 'ACCOUNT_NBR', 
        'RSN_COD', 'ITEM_AMOUNT', 'ITEM_SERIAL', 'CHN_IND', 
        'REASON_DESCR', 'SEQ2', 'ARCHIVE_DATE', 'ARCHIVE_TIME', 'ON_US_IND' ])



    for line in f:
        #f.extend(line.splitlines())
        if 'C' in line:
           #temp.append(line) 
           print(line)
        else:
            print('WRONG LINE:', (line))

我试着一件一件地在下一个要求之前有一个工作部分,但我似乎碰到了另一面墙。这个表单上的其他解决方案也很有帮助,但是我很难将它适应我的代码


Tags: 模块csv代码linerecorditemstartwriter
1条回答
网友
1楼 · 发布于 2024-10-03 02:35:48

如果没有csv,我会这么做:

#!/usr/bin/env python

with open('./data.txt') as f:
    for line in f:
        values = line.split()  # this splits your line using spaces as delimiter, like in your data
        if (len(values) >= 4 and values[3] == 'C'
            and len(values[2]) >= 2 and values[2][:2] == '74'):
            print(line)
        else:
            print('WRONG LINE: ' + line)

输出问题的数据:

  5,556        01        7450282689 C 538196640        9835177743 15          $9,064.81              00                    CREDIT

WRONG LINE:   5,557        01        7450282690 D 031301422         362313705 38            $592.35           43431                    DR CR

WRONG LINE:   5,558        01        7450282691 D 021309379         601298839 38          $1,491.04           44896                    DR CR

WRONG LINE:   5,559        01        7450282692 D 071108834            176885 38          $6,688.00            1454                    DR CR

WRONG LINE:   5,560        01        7450282693 D 031309123     1390001566241 38            $293.42            6878                    DR CR

相关问题 更多 >