списки и подсписки

1

Я использую этот код для разделения данных, чтобы составить список с тремя подсписками. раскол, когда есть * или -. но он также читает \n\n *.. не знаю почему? Я не хочу их читать? может кто-нибудь сказать мне, что я делаю неправильно? это данные

* Цитата дня -Образование - это способность слушать почти все, не теряя самообладания или уверенности в себе - Роберт Фрост -Образование - это то, что выживает, когда то, что было изучено, было забыто - Б. Ф. Скиннер * Факт дня -Фракталы, важная часть теории хаоса, очень полезны при изучении огромного количества областей. Они присутствуют на природе, и поэтому их можно использовать для прогнозирования многих вещей в природе. Они также могут помочь имитировать природу, например, в графическом дизайне для фильмов (анимация облаков и т.д.) Или предсказать действия природы. - Согласно недавнему обзору Just-Eat, не все в Соединенном Королевстве действительно знают, что такое шотландское деликатес, хаггис. Из 1623 британских людей опросили:\n\n * 18% британцев считали, что хаггис был своего рода шотландским животным. \N\n * 15% считали, что это шотландский музыкальный инструмент. \N\n * 4% персонаж из Гарри Поттера. \n\n * 41% даже не знали, что такое национальное блюдо в Шотландии.\n\nКогда небольшое количество шотландцев призналось, что не знает, что такое хаггис, они также обнаружили, что 68% шотландцев как видеть Хаггиса, доставленного как вынос. - С растущими опасениями, связанными с Facebook и постоянно меняющимися настройками конфиденциальности, несколько разработчиков программного обеспечения теперь создали веб-сайт, который позволяет пользователям тратить через обновления статуса всех, у кого нет правильных настроек конфиденциальности, чтобы предотвратить его. \N\nNamed Openbook, конечная цель сайта - еще больше разоблачить проблемы с Facebook и его настройками конфиденциальности для широкой публики и показать людям, насколько легко получить доступ к этому типу информации о совершенно незнакомых людей. Сайт работает как поисковая система, поэтому легко искать такие термины, как "не рассказывать никому" или "я ненавижу своего босса", а поиск также можно сузить по полу. * Домашнее животное дня -Шкотский терьер -Земная акула -Hamster -Tse Tse Fly END

Я использую этот код:

contents = open("data.dat").read()
data = contents.split('*') #split the data at the '*'

newlist = [item.split("-") for item in data if item]

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

  • 0
    Что вы подразумеваете под "он также читает \ n \ n *"? Это часть данных, так почему бы не прочитать их?
  • 0
    Вы видите, как данные размещены напишите сейчас на сайте, это не реальные данные. в нем также есть \ n \ n *. слышишь, ты видишь, как это видно. но когда я читаю его, он печатает меня \ n \ n * я не понимаю, если вы его получили
Показать ещё 1 комментарий
Теги:

4 ответа

2
Лучший ответ

"\n\n" является частью входных данных, поэтому он сохраняется в python. Просто добавьте strip(), чтобы удалить его:

finallist = [item.strip() for item in newlist]

См. раздел() docs: http://docs.python.org/library/stdtypes.html#str.strip

ОБНОВЛЕНО ОТ КОММЕНТАРИЙ:

finallist = [item.replace("\\n", "\n").strip() for item in newlist]
  • 0
    Нет, strip() не будет этого делать! Сначала я тоже запутался, но присмотрелся - в файле есть последовательности '\' и 'n': British people polled:\n\n * 18% of Brits
  • 0
    Если по какой-то причине ваши входные данные экранированы странным образом, и на самом деле после '\' следует 'n', просто сделайте: finallist = [item.replace ("\\ n", "\ n"). Strip () для элемент в новом списке]
1

open ( "data.dat" ). read() - считывает все символы в файле, а не только те, которые вы хотите. Если вам не нужно "\n", вы можете попробовать content.replace( "\n", "") или прочитать строки (не весь контент) и обрезать последний символ "\n" каждой строки.

0

Следующее решение вашей проблемы я считаю:

result = [  [subitem.replace(r'\n\n', '\n') for subitem in item.split('\n-')]
            for item in open('data.txt').read().split('\n*')  ]

# now let pretty print the result
for i in result:
    print '***', i[0], '***'
    for j in i[1:]:
        print '\t--', j
    print

Примечание. Я разделил на новую строку + * или -, таким образом, он не будет разбиваться на тире внутри текста. Также я заменю текстовую последовательность символов \ n \ n (r'\n\n') новым символом строки '\n'. И однострочное выражение - это понимание списка, способ построения списков в одном gulp, без нескольких .append() или +

0

Это разделит любую звездочку, которая у вас есть в тексте.

Лучшая реализация - сделать что-то вроде:

lines = []

for line in open("data.dat"):
    if line.lstrip.startswith("*"):
        lines.append([line.strip()])  # append a list with your line
    elif line.lstrip.startswith("-"):
        lines[-1].append(line.strip())

Для получения дополнительной домашней работы изучите, что происходит при использовании функции open() таким образом.

Ещё вопросы

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