条件后合并线条

时间:2014-05-22 09:46:17

标签: python

我有一个来自txt文件的数据集,其中每行包含4个数据点,用空格分隔。由于收集数据时出现一些错误,一些行被分成两行,出现几个空格而不是实际数据。因此,输入应该如下所示:

data data data data
data data data data
data data data data

但实际上看起来像这样(第二行最后有三个空格,第三行以三个空格开头):

data data data data
data data   
   data
data data data data

我想为缺失的数据添加“n / a”,并在第二个示例中将第二行和第三行合并为一行。最后,我想将其保存为新文件。

这是我的尝试:

f1 = open("pilTest.txt","r") 
f2 = open("pilFix.txt", "w") 
stop = 0
for line in f1: 
    # Loop over each word in line 
    words = line.split(" ")
    for i in range(len(words)):
        if len(words[i])!=0:
            f2.write(words[i])
            f2.write(" ")
        elif stop==0:            
            f2.write("n/a")
            f2.write(" ")
            stop = 1

建议?

我得到的是

data data data data
data data n/a
data
data data data data

所需的输出是

data data data data
data data n/a data
data data data data

1 个答案:

答案 0 :(得分:1)

如果空间有重要意义,您可能需要分析这些空间。或者,假设数据丢失时出现错误,并且在虚线中间丢失错误,追溯填写缺失的数据可能有效:

f1 = open("pilTest.txt","r") 
f2 = open("pilFix.txt", "w")

_last_words = []
_expected_length = 4
for line in f1: 
    words = line.split()
    if len(words) != _expected_length:
        if _last_words:
            blanks = _expected_length - (len(_last_words) + len(words))
            f2.write(' '.join(_last_words + ['n/a']*blanks + words) + '\n')
            _last_words = []
        else:
            _last_words = words
    else:
        f2.write(line)

f2.close()