2017-01-03 86 views
3

我目前正在嘗試在每行14行中獲取第一個日期,並在以下日期將其替換。例如:我有一個txt文件,這些數據每14行更改一次信息python

02/dez 06:03 18.45 0.16 18.45 0.04 
02/dez 06:03 17.56 0.26 17.62 0.21 
02/dez 06:03 16.43 0.39 16.65 0.34 
02/dez 06:03 12.72 0.39 14.35 0.38 
02/dez 06:03 4.70 0.49 5.29 0.49 
02/dez 06:03 3.87 0.41 4.41 0.41 
02/dez 06:03 3.53 0.36 4.04 0.33 
02/dez 06:04 2.62 0.55 3.05 0.54 
02/dez 06:04 1.69 0.44 1.96 0.46 
02/dez 06:04 1.59 0.34 1.85 0.35 
02/dez 06:04 1.56 0.31 1.80 0.29 
02/dez 06:04 0.54 0.51 0.64 0.50 
02/dez 06:04 0.47 0.43 0.56 0.45 
02/dez 06:04 0.00 0.48 0.00 0.50 
02/dez 06:19 18.87 0.12 18.78 0.04 
02/dez 06:19 18.32 0.23 18.18 0.23 
02/dez 06:19 17.75 0.47 17.57 0.36 
02/dez 06:19 16.63 0.51 16.31 0.41 
02/dez 06:19 7.07 0.77 6.77 0.64 
02/dez 06:19 5.86 0.65 5.56 0.55 
02/dez 06:19 5.44 0.59 5.04 0.46 
02/dez 06:20 4.32 0.78 3.80 0.66 
02/dez 06:20 2.91 0.72 2.41 0.55 
02/dez 06:20 2.85 0.67 2.24 0.47 
02/dez 06:20 2.85 0.68 2.16 0.39 
02/dez 06:20 0.98 0.85 0.76 0.60 
02/dez 06:20 0.74 0.72 0.65 0.53 
02/dez 06:20 0.00 0.73 0.00 0.60 
02/dez 06:34 18.91 0.10 18.88 0.03 
02/dez 06:34 18.44 0.29 18.39 0.20 
02/dez 06:34 17.95 0.41 17.91 0.35 
02/dez 06:34 17.07 0.51 17.09 0.47 
02/dez 06:34 7.79 0.82 8.17 0.78 
02/dez 06:34 6.40 0.73 6.86 0.71 
02/dez 06:35 5.89 0.67 6.36 0.61 
02/dez 06:35 4.49 0.83 4.92 0.86 
02/dez 06:35 2.88 0.74 3.20 0.75 
02/dez 06:35 2.69 0.66 3.04 0.70 
02/dez 06:35 2.62 0.58 2.99 0.63 
02/dez 06:35 0.94 0.82 1.10 0.88 
02/dez 06:35 0.80 0.75 0.94 0.82 
02/dez 06:35 0.00 0.85 0.00 0.89 
        . 
        . 
        . 

我想要實現的是:

02/dez;06:03;18.45;0.16;18.45;0.04 
02/dez;06:03;17.56;0.26;17.62;0.21 
02/dez;06:03;16.43;0.39;16.65;0.34 
02/dez;06:03;12.72;0.39;14.35;0.38 
02/dez;06:03;4.70;0.49;5.29;0.49 
02/dez;06:03;3.87;0.41;4.41;0.41 
02/dez;06:03;3.53;0.36;4.04;0.33 
02/dez;06:03;2.62;0.55;3.05;0.54 
02/dez;06:03;1.69;0.44;1.96;0.46 
02/dez;06:03;1.59;0.34;1.85;0.35 
02/dez;06:03;1.56;0.31;1.80;0.29 
02/dez;06:03;0.54;0.51;0.64;0.50 
02/dez;06:03;0.47;0.43;0.56;0.45 
02/dez;06:03;0.00;0.48;0.00;0.50 
02/dez;06:19;18.87;0.12;18.78;0.04 
02/dez;06:19;18.32;0.23;18.18;0.23 
02/dez;06:19;17.75;0.47;17.57;0.36 
02/dez;06:19;16.63;0.51;16.31;0.41 
02/dez;06:19;7.07;0.77;6.77;0.64 
02/dez;06:19;5.86;0.65;5.56;0.55 
02/dez;06:19;5.44;0.59;5.04;0.46 
02/dez;06:19;4.32;0.78;3.80;0.66 
02/dez;06:19;2.91;0.72;2.41;0.55 
02/dez;06:19;2.85;0.67;2.24;0.47 
02/dez;06:19;2.85;0.68;2.16;0.39 
02/dez;06:19;0.98;0.85;0.76;0.60 
02/dez;06:19;0.74;0.72;0.65;0.53 
02/dez;06:19;0.00;0.73;0.00;0.60 
02/dez;06:34;18.91;0.10;18.88;0.03 
02/dez;06:34;18.44;0.29;18.39;0.20 
02/dez;06:34;17.95;0.41;17.91;0.35 
02/dez;06:34;17.07;0.51;17.09;0.47 
02/dez;06:34;7.79;0.82;8.17;0.78 
02/dez;06:34;6.40;0.73;6.86;0.71 
02/dez;06:34;5.89;0.67;6.36;0.61 
02/dez;06:34;4.49;0.83;4.92;0.86 
02/dez;06:34;2.88;0.74;3.20;0.75 
02/dez;06:34;2.69;0.66;3.04;0.70 
02/dez;06:34;2.62;0.58;2.99;0.63 
02/dez;06:34;0.94;0.82;1.10;0.88 
02/dez;06:34;0.80;0.75;0.94;0.82 
02/dez;06:34;0.00;0.85;0.00;0.89 
02/dez;06:50;19.81;0.12;19.36;0.04 
02/dez;06:50;19.57;0.27;19.06;0.21 
02/dez;06:50;19.37;0.48;18.79;0.40 
02/dez;06:50;18.94;0.59;18.42;0.49 
02/dez;06:50;15.15;1.53;13.23;1.26 
02/dez;06:50;10.78;1.23;11.06;1.19 
02/dez;06:50;9.13;1.06;10.11;1.10 
02/dez;06:50;6.99;1.23;7.79;1.31 
02/dez;06:50;4.54;1.21;4.97;1.22 
02/dez;06:50;4.27;1.11;4.63;1.12 
02/dez;06:50;4.15;1.04;4.45;1.08 
02/dez;06:50;1.51;1.30;1.61;1.29 
02/dez;06:50;1.29;1.25;1.34;1.19 
02/dez;06:50;0.00;1.35;0.00;1.31 
      . 
      . 
      . 

我的代碼工作正常,在文件中14行,但我被困在在14,28,42,56行中獲取日期並將其替換爲以下13行。 這裏是我的代碼:

result = [] 
with open('test.txt') as f: 
    lines = f.readlines() 
    firstLines = lines[0].strip().split(' ') 
    hour = firstLines[1] 
    for line in lines: 
     col = line.strip().split(' ') 
     if col[1] != hour: 
      col[1] = hour 
     result.append(col) 
    outfile = open('result.txt', 'w') 
    for i in result: 
     outfile.write(';'.join(i) + "\n") 

我試過的東西:

with open(filename) as f: 
    lines = f.readlines() 
    for i in range(0, len(lines), 14): 
     firstLines = lines[0].strip().split(' ') 
     hour = firstLines[1] 
     #col = lines[i:i + 14] I got stuck here 

有人能幫助我嗎?

+0

'print(lines)'並告訴我輸出 –

回答

6

您是否熟悉the modulo (%) operator?使用它會讓你知道你什麼時候開始一個新的行。所以,像這樣:

for line_number, line in enumerate(lines): 
    if (line_number % 14) == 0: 
     # Every 14th row, save the value of column 1 as curHour 
     curHour = col[1] 
    # Use the value of curHour which changes every 14th row 
    result[1] = curHour 
    ... 
+0

謝謝!有用!我沒有想到這一點! – thiagorls

0

你有一個for循環運行14步,迄今如此好。然後在第一個從0到13運行的第一個循環內添加第二個循環,並將該值複製到該字段中。

如果行數不是14的倍數(比如說你有32行,那麼你有2個完整的14個集合和一個只有4個集合),你將不得不添加一些額外的代碼。 。

或者,您可以查看pandas包,該包對於讀取這些數據文件並對其進行操作要好得多,但這裏解釋它會超出範圍。快點看一下。

+0

我開始研究熊貓包!謝謝!! – thiagorls

0

可能這樣的事情可能會與一些調整工作。

with open(filename) as f: 
    lines = f.readlines() 
    for i in range(0, len(lines), 14): 
     firstLines = lines[0].strip().split(' ') 
     hour = firstLines[1] 
     for j in range(i, i+14): 
      line = lines[j] 
      line.strip().split(' ')[0] = hour