Анализ текстового файла с разделителями табуляции для замены столбцов одним вертикальным списком (Python)

1

Я очень новичок в Python, и я знаю, что это довольно простой вопрос. У меня есть текстовый файл со столбцами данных. Я хочу удалить столбцы и сделать его одним длинным списком.

У меня есть следующий код:

for line in open('feddocs_2011.txt', 'r'):
    segmentedLine = line.split("/t")
    print segmentedLine

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

while segmentedLine:
    item = segmentedLine.split("\t")
    print item

Большое спасибо за любой ввод.

  • 3
    Не понятно, что ты хочешь делать. Можете ли вы дать (маленький) пример ввода и вывода?
Теги:

5 ответов

5

В первом цикле вы правильно разделили строки. То, что вы хотите сделать, - это иметь второй цикл для итерации по каждому элементу tab-. Это будет выглядеть так:

for line in open('feddocs_2011.txt', 'r'):
    segmentedLine = line.split("\t")
    for item in segmentedLine:
        print item

Или более кратко, без временной переменной:

for line in open('feddocs_2011.txt', 'r'):
    for item in line.split("\t"):
        print item
  • 0
    вероятно, нужно убрать завершающий '\n' из строк ...
  • 0
    Большое спасибо - это сработало! Спасибо всем, кто так быстро отреагировал!
2

как насчет:

x = [line.split('\t') for line in open('file.txt')]

и вы можете присоединиться к спискам, если хотите:

sum(x, [])

[изменить]

если ваш файл имеет только вкладки (без пробелов), которые вы можете просто сделать:

x = open('file.txt').read().split()
  • 0
    Я не знаю, как текст отформатирован наверняка ... Если он также хочет преобразовать данные в int или float, ему не нужно удалять конечные \ n или \ r
  • 0
    использование sum() очень неэффективно (O (n ^ 2)) в больших списках
Показать ещё 4 комментария
1

Итак, у вас есть

foo<tab>bar<tab>baz
bla<tab>bla<tab>bla

и вы хотите, чтобы он был

foo
bar
baz
bla
bla
bla

Right?

Тогда вы можете просто сделать

with open("myfile.txt", "r") as f:
    text = f.read().replace("\t", "\n")

Теперь text - это одна строка. Если вам нужен список всех элементов (["foo", "bar", "baz", "bla", "bla", "bla"]), используйте

text = f.read().replace("\t", "\n").split("\n")
0

Если я правильно понял, что вам нужно:

import itertools
print '\n'.join(list(itertools.chain(*[line.strip().split(',') for line in open('feddocs_2011.txt', 'r')])))
0

поместите все, что следует за вкладкой в ​​новой строке

Если это все, что вам нужно, почему бы просто не использовать функцию str.replace?

for line in open('feddocs_2011.txt', 'r'):
    segemented_line = line.replace('\t', '\n')
    print(segmented_line)

Если по какой-то причине вы хотите сохранить вкладки:

for line in open('feddocs_2011.txt', 'r'):
    segemented_line = line.replace('\t', '\t\n')
    print(segmented_line)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню