繁体   English   中英

Python 从txt文件中逐行加入

[英]Python join line by key from txt file

嗨,我想通过 python 中的键在 txt 文件中加入行,例如,尝试在第一组数据中使用“H”获取第一行并将“L”与 S820098509 加入。

我有以下

H,REPPTY,S820098509,C,S,909688,820001,20181023,20181108,20181205,"FOB CNNGB AUSYD        ",PLANOGRAM PO,N,,,
L,REPPTY,S820098509,0007,RCM4PCDUOTBLK,347,,,,20181108,20181205,7.8,AUD,A5381060,SET,1
L,REPPTY,S820098509,0018,RCMRBRRNRGRY,246,,,,20181108,20181205,5.1,AUD,A5381079,EACH,1
L,REPPTY,S820098509,0020,RCM2PCRAWGRY,246,,,,20181108,20181205,2.8,AUD,A5381083,SET,1
H,REPPTY,S820098691,C,O,909357,820001,20181029,20181114,20181211,"FOB CNNGB AUSYD        ",,N,,,
L,REPPTY,S820098691,0062,6PK1300RB,24,,,,20181114,20181211,2.32,AUD,A9437132,EACH,1
H,REPPTY,S820098695,C,O,909513,820001,20181029,20181114,20181211,"FOB CNSHA AUSYD        ",,N,,,
L,REPPTY,S820098695,0004,MTAP50EL5,226,,,,20181114,20181211,21.4,AUD,A5349617,EACH,1
L,REPPTY,S820098695,0005,MTAP50AL1,344,,,,20181114,20181211,3.3,AUD,A5349618,EACH,1
H,REPPTY,S820098704,C,O,909903,820001,20181029,20181114,20181211,"FOB CNSHA AUSYD        ",,N,,,
L,REPPTY,S820098704,0004,JTE229,32,,,,20181114,20181211,4.07,AUD,A9404146,EACH,1
L,REPPTY,S820098704,0040,JBJ7513,33,,,,20181114,20181211,5.38,AUD,A9430524,EACH,1
H,REPPTY,S820098742,C,O,909613,820001,20181029,20181114,20181211,"FOB CNTAO AUSYD        ",,N,,,
L,REPPTY,S820098742,0030,DF7475S,70,,,,20181114,20181211,23.52,AUD,A9485074,EACH,1
H,REPPTY,S820098875,C,O,909520,820001,20181101,20181120,20181217,"FOB CNSHA AUSYD        ",,N,,,
L,REPPTY,S820098875,0052,RST158,72,,,,20181120,20181217,1.69,AUD,A9417626,EACH,36
L,REPPTY,S820098875,0055,RST176,36,,,,20181120,20181217,3.63,AUD,A9445084,EACH,36
H,REPPTY,S820099023,C,O,909352,820001,20181102,20181120,20181217,"FOB CNTAO AUSYD        ",,N,,,
L,REPPTY,S820099023,0072,DB1940TS,15,,,,20181120,20181217,11.77,AUD,A9447563,SET,5

我想和他们一起看起来像这样。

REPPTY,S820098509,C,S,909688,820001,20181023,20181108,20181205,"FOB CNNGB AUSYD        ",PLANOGRAM PO,N,,,0007,RCM4PCDUOTBLK,347,,,,20181108,20181205,7.8,AUD,A5381060,SET,1
REPPTY,S820098509,C,S,909688,820001,20181023,20181108,20181205,"FOB CNNGB AUSYD        ",PLANOGRAM PO,N,,,0018,RCMRBRRNRGRY,246,,,,20181108,20181205,5.1,AUD,A5381079,EACH,1
REPPTY,S820098509,C,S,909688,820001,20181023,20181108,20181205,"FOB CNNGB AUSYD        ",PLANOGRAM PO,N,,,S820098509,0020,RCM2PCRAWGRY,246,,,,20181108,20181205,2.8,AUD,A5381083,SET,1
REPPTY,S820098691,C,O,909357,820001,20181029,20181114,20181211,"FOB CNNGB AUSYD        ",,N,,,0062,6PK1300RB,24,,,,20181114,20181211,2.32,AUD,A9437132,EACH,1
REPPTY,S820098695,C,O,909513,820001,20181029,20181114,20181211,"FOB CNSHA AUSYD        ",,N,,,0004,MTAP50EL5,226,,,,20181114,20181211,21.4,AUD,A5349617,EACH,1
REPPTY,S820098695,C,O,909513,820001,20181029,20181114,20181211,"FOB CNSHA AUSYD        ",,N,,,0005,MTAP50AL1,344,,,,20181114,20181211,3.3,AUD,A5349618,EACH,1
REPPTY,S820098704,C,O,909903,820001,20181029,20181114,20181211,"FOB CNSHA AUSYD        ",,N,,,0004,JTE229,32,,,,20181114,20181211,4.07,AUD,A9404146,EACH,1
REPPTY,S820098704,C,O,909903,820001,20181029,20181114,20181211,"FOB CNSHA AUSYD        ",,N,,,0040,JBJ7513,33,,,,20181114,20181211,5.38,AUD,A9430524,EACH,1
REPPTY,S820098742,C,O,909613,820001,20181029,20181114,20181211,"FOB CNTAO AUSYD        ",,N,,,0030,DF7475S,70,,,,20181114,20181211,23.52,AUD,A9485074,EACH,1
REPPTY,S820098875,C,O,909520,820001,20181101,20181120,20181217,"FOB CNSHA AUSYD        ",,N,,,0052,RST158,72,,,,20181120,20181217,1.69,AUD,A9417626,EACH,36
REPPTY,S820098875,C,O,909520,820001,20181101,20181120,20181217,"FOB CNSHA AUSYD        ",,N,,,0055,RST176,36,,,,20181120,20181217,3.63,AUD,A9445084,EACH,36
REPPTY,S820099023,C,O,909352,820001,20181102,20181120,20181217,"FOB CNTAO AUSYD        ",,N,,,0072,DB1940TS,15,,,,20181120,20181217,11.77,AUD,A9447563,SET,5

如果列表是有序的,这是一个非常简单的有限 state 机器示例:每个H重新定义头部,每个L是一个新的 output 行。 您应该使用csv模块来解析数据:

import io
import csv

DATA = """H,REPPTY,S820098509,C,S,909688,820001,20181023,20181108,20181205,"FOB CNNGB AUSYD        ",PLANOGRAM PO,N,,,
L,REPPTY,S820098509,0007,RCM4PCDUOTBLK,347,,,,20181108,20181205,7.8,AUD,A5381060,SET,1
L,REPPTY,S820098509,0018,RCMRBRRNRGRY,246,,,,20181108,20181205,5.1,AUD,A5381079,EACH,1
L,REPPTY,S820098509,0020,RCM2PCRAWGRY,246,,,,20181108,20181205,2.8,AUD,A5381083,SET,1
H,REPPTY,S820098691,C,O,909357,820001,20181029,20181114,20181211,"FOB CNNGB AUSYD        ",,N,,,
L,REPPTY,S820098691,0062,6PK1300RB,24,,,,20181114,20181211,2.32,AUD,A9437132,EACH,1
H,REPPTY,S820098695,C,O,909513,820001,20181029,20181114,20181211,"FOB CNSHA AUSYD        ",,N,,,
L,REPPTY,S820098695,0004,MTAP50EL5,226,,,,20181114,20181211,21.4,AUD,A5349617,EACH,1
L,REPPTY,S820098695,0005,MTAP50AL1,344,,,,20181114,20181211,3.3,AUD,A5349618,EACH,1
H,REPPTY,S820098704,C,O,909903,820001,20181029,20181114,20181211,"FOB CNSHA AUSYD        ",,N,,,
L,REPPTY,S820098704,0004,JTE229,32,,,,20181114,20181211,4.07,AUD,A9404146,EACH,1
L,REPPTY,S820098704,0040,JBJ7513,33,,,,20181114,20181211,5.38,AUD,A9430524,EACH,1
H,REPPTY,S820098742,C,O,909613,820001,20181029,20181114,20181211,"FOB CNTAO AUSYD        ",,N,,,
L,REPPTY,S820098742,0030,DF7475S,70,,,,20181114,20181211,23.52,AUD,A9485074,EACH,1
H,REPPTY,S820098875,C,O,909520,820001,20181101,20181120,20181217,"FOB CNSHA AUSYD        ",,N,,,
L,REPPTY,S820098875,0052,RST158,72,,,,20181120,20181217,1.69,AUD,A9417626,EACH,36
L,REPPTY,S820098875,0055,RST176,36,,,,20181120,20181217,3.63,AUD,A9445084,EACH,36
H,REPPTY,S820099023,C,O,909352,820001,20181102,20181120,20181217,"FOB CNTAO AUSYD        ",,N,,,
L,REPPTY,S820099023,0072,DB1940TS,15,,,,20181120,20181217,11.77,AUD,A9447563,SET,5"""

# two pseudo-files, source and destination
s = io.StringIO(DATA) # use `with open(..., 'r') as s:` if you have a file
d = io.StringIO() # use with open(..., 'w') as 

reader = csv.reader(s)
writer = csv.writer(d)

header = []
for row in reader:
    if row[0] == "H": # a header
        header = row[1:] # store it
    else: # a line
        assert header[:2] == row[1:3] # check the identifier
        writer.writerow(head + row[3:]) # merge rows

print(d.getvalue()) # content of the pseudo-file

注意:您在 header 和行之间多了一个逗号,因为我们合并了两个列表。

如果这些行不跟随标题,您必须将这些行和标题存储在某个字典中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM