Как мне отформатировать текст из файла в Python? - PullRequest
0 голосов
/ 17 февраля 2012

У меня есть файл, который имеет 50 строк (каждая строка имеет имя), и я хотел бы взять каждую строку и прочитать ее, а затем распечатать, но в формате, который имеет 5 столбцов и 10 строк на столбец.

Хотелось бы что-то вроде этого:

ххххх - ххххх - ххххх - ххххх - ххххх

ххххх - ххххх - ххххх - ххххх - ххххх

ххххх - ххххх - ххххх - ххххх - ххххх

ххххх - ххххх - ххххх - ххххх - ххххх

ххххх - ххххх - ххххх - ххххх - ххххх

Это код, который у меня есть. Он просто читает и печатает каждую строку на новой строке:

f = open('file.txt', 'r')
for x in f:
    x = x.lstrip()
    x = x.rstrip()
    x = x.title()
    print x

Причина x.lstrip и x.rstip и x.title в том, что текст отформатирован очень странно в файле, поэтому я должен это сделать. Это для назначения. Спасибо!

Ответы [ 4 ]

1 голос
/ 17 февраля 2012

Примерно так может работать:

def print_table(lines, col_num, col_width):
    for line_ix in range(0, len(lines), col_num):
        print ' -- '.join([line.strip().ljust(col_width) for line in lines[line_ix:line_ix+col_num]])
0 голосов
/ 17 февраля 2012

Следующее не подходит для начинающего.Считайте, что это всего лишь один из многих (и не лучший) способов сделать это.

Вы можете читать 5 строк за раз, используя ответ для Какой самый «питонный» способ переборасписок в чанках? :

#!/usr/bin/env python3
import fileinput

# read 5 lines at a time from stdin or file(s) at the command-line
for row in zip(*[iter(fileinput.input())]*5):
    print(' -- '.join("%-4s" % item.strip() for item in row))

Примечание: он ожидает ровно 5*m строк на входе, чтобы получить m выходных строк.

fileinput.input() возвращает итератор по строкам ввода и вот объяснение того, как приведенный выше код группирует строки .

Пример

$ python reformat-input.py input.txt
a0   -- b0   -- c00  -- d0   -- e0  
a1   -- b111 -- c1   -- d1   -- e1  
a2   -- b2   -- c2   -- d2   -- e2 

Где input.txt:

a0
b0
c00
d0
e0
a1
b111
c1
d1
e1
a2
b2
c2
d2
e2
0 голосов
/ 17 февраля 2012

делает ли это то, что вы хотите? (возможно, я неправильно истолковал то, что вам нужно) вы хотите, чтобы 5 строк из файла отображались в каждой строке нового вывода, каждая строка отделялась '-'?

f = open('file.txt', 'r')
text = ""
lines = []
counter = 0

for line in f:
    line = line.strip()
    if counter % 5 == 0 and text > '':
        counter = 0
        lines.append(text)
        text = ''

    text += line + ' '
    counter += 1  


for line in lines:
    vals = tuple(line.split())
    print('%s -- %s -- %s -- %s -- %s' % (vals))
0 голосов
/ 17 февраля 2012

вы можете попробовать использовать тип файла .dat, а затем f = loadtxt ("file.dat") и это поместит ваши данные в массив, используя столбцы и строки, которые вы уже создали в файле. Вам придется немного отредактировать файл данных, но он, безусловно, будет работать. и если вы хотите изменить что-то еще, вы можете использовать такие команды, как

c = f [:, 5], который создаст новый массив из 1 столбца со всеми данными из столбца 5 из исходного файла

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...