从文本文件中提取包含标题和定界符的列

时间:2019-07-03 14:27:43

标签: python data-extraction

我有一个文本文件,如下所示:

~Date and Time of Data Converting: 15.02.2019 16:12:44
~Name of Test: XXX
~Address: ZZZ
~ID: OPP
~Testchannel: CH06

~a;b;DateTime;c;d;e;f;g;h;i;j;k;extract;l;m;n;o;p;q;r
0;1;04.03.2019 07:54:19;0;0;2;Pause;3,57263521596443;0;0;0;0;24,55957;1;3;0;0;0;0;0
5,5523894132E-7;2;04.03.2019 07:54:19;5,5523894132E-7;5,5523894132E-7;2;Pause;3,57263521596443;0;0;0;0;24,55957;1;0;0;0;0;0;0
0,00277777777779538;3;04.03.2019 07:54:29;0,00277777777779538;0,00277777777779538;2;Pause;3,5724446855812;0;0;0;0;24,55653;1;1;0;0;0;0;0
0,00555555532278617;4;04.03.2019 07:54:39;0,00555555532278617;0,00555555532278617;2;Pause;3,57263521596443;0;0;0;0;24,55957;1;1;0;0;0;0;0
0,00833333333338613;5;04.03.2019 07:54:49;0,00833333333338613;0,00833333333338613;2;Pause;3,57263521596443;0;0;0;0;24,55653;1;1;0;0;0;0;0
0,0111112040002119;6;04.03.2019 07:54:59;0,0111112040002119;0,0111112040002119;2;Pause;3,57263521596443;0;0;0;0;24,55653;1;1;0;0;0;0;0
0,013888887724954;7;04.03.2019 07:55:09;0,013888887724954;0,013888887724954;2;Pause;3,57263521596443;0;0;0;0;24,55653;1;1;0;0;0;0;0

我需要从名为extract的列中提取值,并需要将输出存储为excel文件。 谁能告诉我我该如何进行? 到目前为止,我只能为输出创建一个空的excel文件,并且已经阅读了文本文件。但是我不知道如何将输出追加到空的excel文件中。

import os
file=open('extract.csv', "a")
if os.path.getsize('extract.csv')==0:
    file.write(" "+";"+"Datum"+";"+"extract"+";")

with open('myfile.txt') as f:
    dat=[f.readline() for x in range(10)]
    datum=dat[7].split(' ')[3]
data = np.genfromtxt('myfile.txt', delimiter=';', skip_header=12,dtype=str)

1 个答案:

答案 0 :(得分:1)

您可以使用pandas模块。

  • 您需要阅读跳过文本文件的第一行。在这里,我考虑不知道有多少个。我一直循环直到找到数据行。
  • 然后读取数据。
  • 最后,使用to_excel (doc)
  • 将其导出为数据框

代码在这里:

# Import module
import pandas as pd

# Read file
with open('temp.txt') as f:
    content = f.read().split("\n")

# Skip the first lines  (find number start data)
for i, line in enumerate(content):
    if line and line[0] != '~': break

# Columns names and data
header = content[i - 1][1:].split(';')
data = [row.split(';') for row in content[i:]]

# Store in dataframe
df = pd.DataFrame(data, columns=header)
print(df)
#                      a  b             DateTime                    c                    d  e      f  ...  l  m  n  o  p  q  r
# 0                    0  1  04.03.2019 07:54:19                    0                    0  2  Pause  ...  1  3  0  0  0  0  0
# 1      5,5523894132E-7  2  04.03.2019 07:54:19      5,5523894132E-7      5,5523894132E-7  2  Pause  ...  1  0  0  0  0  0  0
# 2  0,00277777777779538  3  04.03.2019 07:54:29  0,00277777777779538  0,00277777777779538  2  Pause  ...  1  1  0  0  0  0  0
# 3  0,00555555532278617  4  04.03.2019 07:54:39  0,00555555532278617  0,00555555532278617  2  Pause  ...  1  1  0  0  0  0  0
# 4  0,00833333333338613  5  04.03.2019 07:54:49  0,00833333333338613  0,00833333333338613  2  Pause  ...  1  1  0  0  0  0  0
# 5   0,0111112040002119  6  04.03.2019 07:54:59   0,0111112040002119   0,0111112040002119  2  Pause  ...  1  1  0  0  0  0  0
# 6    0,013888887724954  7  04.03.2019 07:55:09    0,013888887724954    0,013888887724954  2  Pause  ...  1  1  0  0  0  0  0

# Select only the Extract column
# df = df.Extract

# Save the data in excel file
df.to_excel("OutPut.xlsx", "MySheetName", index=False)

注意:如果您知道要跳过的行数,则只需使用read_csv参数使用skiprows加载数据帧。 (doc)

希望有帮助!