Линия разделена, когда несколько пробелов в python - PullRequest
0 голосов
/ 10 апреля 2020

Я посмотрел много похожих вопросов, однако мои разделители не являются специальными символами, такими как "\" или "*", поэтому ни одно из решений не сработало. Я записываю свои результаты в файл в python и снова открываю его для чтения и обработки.

file1.txt
control1
1  10      12
1  34      44
2   1      -3
control2
3   4     -10.3
3   3.390   4

Я разделяю каждую запись до тех пор, пока не увижу строку с 'control' в chapters:

import re
import sys, string, glob, os
with open('file1.txt') as f:
        with open("control_output.txt", "w") as output:
            mytext = f.read()
            chapter = re.split("control[0-2]+\n", mytext)
            i=1
            print chapter[i]
            output.write(chapter[i])
            for filename in glob.glob(os.path.join(filePath, 'control_output.txt')):
                 merged_table=open(filename,'r')
                 for line in merged_table:
                      line = line.strip().split('\t')
                      print line

Однако он ничего не печатает, так как строка не имеет разделителя табуляции. Если я go выйду из скрипта перед чтением файла и изменим все пробелы на вкладки, то он будет работать:

sed -i 's/ \+ /\t/g' control_output.txt 

Тогда у меня будет вывод:

['1', '10', '12']
['1', '34', '44']
['2', '1', '-3']

I также попытался с subprocess.call однако

subprocess.call(["sed", "-i",  's/ \+ /\t/g', "control_output.txt"])

Тогда у меня есть вывод:

[[]]

Я попытался re.split с несколькими пробелами:

line = re.split(r'\s*', line)

Что также дало

[[]]

Однако ожидаемый результат должен быть:

['1', '10', '12']
['1', '34', '44']
['2', '1', '-3']

Как разделить строку с несколькими разделителями?

Ответы [ 2 ]

2 голосов
/ 10 апреля 2020
for line in merged_table:
    line = line.strip().split()
        print line

Это разделит все пробелы, а не только вкладки

1 голос
/ 10 апреля 2020
import re
import sys, string, glob, os
with open('file1.txt') as f:
    with open("control_output.txt", "w") as output:
        mytext = f.read()
        chapter = re.split("control[0-2]+\n", mytext)
        i=1
        print chapter[i]
        output.write(chapter[i])

    # You should move this code block out of with open("control_output.txt", "w") as output:
    for filename in glob.glob(os.path.join(filePath, 'control_output.txt')):
        with open(filename, 'r') as f_table:
            merged_table = f_table.readlines()

        for line in merged_table:
            line = re.split('\s+', line.strip())
            print line

Надеюсь помочь вам 100

...