【问题标题】:add different data at the end of different lines in a file在文件中不同行的末尾添加不同的数据
【发布时间】:2014-08-27 09:27:50
【问题描述】:

我有一个 txt 文件,结构如下:

我想在每条长线的末尾添加它们上方短线的数据(逗号后),没有描述(STN_NO,STN_ID,INST_HT),如下所示:

有可能吗?有什么想法吗?

附言我正在使用puthon 3.3

【问题讨论】:

    标签: csv python-3.x numpy append


    【解决方案1】:

    或者,您可以使用不涉及正则表达式的更简单(虽然更长)的解决方案。

    f = open('file.txt')
    for line in f:
        line = line.replace('\n', '')
        if 'STN_NO' in line:
            stn_no = line.split(',')[-1]
            print(line)
        elif 'STN_ID' in line:
            stn_id = line.split(',')[-1]
            print(line)
        elif 'INST_HT' in line:
            inst_ht = line.split(',')[-1]
            print(line)
        else:
            print(line[:-1] + ',' + stn_no + ',' + stn_id + ',' + inst_ht)
    

    请注意,这会将INST_HT 行中的分号放回到每条长行的末尾。如果不需要,可以使用inst_ht[:-1] 将其删除。

    【讨论】:

      【解决方案2】:

      让我们假设您的图片中的文件是这个简化版本:

      STN_NO, 41943043
      STN_ID, KAST
      INST_HT, 1.01500;
      Line 1
      Line 2
      Line 3
      STN_NO, 41943062
      STN_ID, S2
      INST_HT, 0.75;
      Line 4
      Line 5
      Line 6
      STN_NO, 123456
      STN_ID, XXX
      INST_HT, 0.99;
      Line 7
      Line 8
      Line 9
      

      您可以使用正则表达式来捕获块中的模式并组合:

      import re
      
      pat=re.compile(r'^STN_NO,\s+([^\n]+)$\s*^STN_ID,\s+([^\n]+)$\s*^INST_HT,\s+([^;]+);\s*(.*?)(?=^STN_NO|\Z)', re.S | re.M)
      
      with open(fn) as f:
          txt=f.read()
      
      for mg in pat.finditer(txt):
          for line in mg.group(4).splitlines():
              print(line+','+','.join([mg.group(1), mg.group(2), mg.group(3)]))
      

      打印:

      Line 1,41943043,KAST,1.01500
      Line 2,41943043,KAST,1.01500
      Line 3,41943043,KAST,1.01500
      Line 4,41943062,S2,0.75
      Line 5,41943062,S2,0.75
      Line 6,41943062,S2,0.75
      Line 7,123456,XXX,0.99
      Line 8,123456,XXX,0.99
      Line 9,123456,XXX,0.99
      

      如果您的文件比内存容量大,请使用mmap 进行虚拟化。

      【讨论】:

        猜你喜欢
        • 2019-06-21
        • 1970-01-01
        • 1970-01-01
        • 2015-05-27
        • 1970-01-01
        • 1970-01-01
        • 2022-01-09
        • 2017-10-14
        • 1970-01-01
        相关资源
        最近更新 更多