Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Csv 在文件中不同行的末尾添加不同的数据_Csv_Python 3.x_Numpy_Append - Fatal编程技术网

Csv 在文件中不同行的末尾添加不同的数据

Csv 在文件中不同行的末尾添加不同的数据,csv,python-3.x,numpy,append,Csv,Python 3.x,Numpy,Append,我有一个txt文件,其结构如下: 我想在每一条长线的末尾添加上面短线的数据(逗号后),没有描述(STN_NO,STN_ID,INST_HT),如下所示: 可能吗?有什么想法吗 p、 我使用的是puthon 3.3让我们假设图像中的文件简化版本: 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

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

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

可能吗?有什么想法吗


p、 我使用的是puthon 3.3

让我们假设图像中的文件简化版本:

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

如果您的文件大于内存容量,请使用虚拟化

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

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
行中的分号放回每一长行的末尾。如果不需要,可以使用
指令[:-1]
将其删除