Как читать потом разбирать с разбивкой и записывать в текстовый файл? - PullRequest
2 голосов
/ 21 сентября 2019

Я изо всех сил пытаюсь заставить readline () и split () работать вместе, как я и ожидал.Я пытаюсь использовать .split (')'), чтобы вырезать некоторые данные из текстового файла и записать некоторые из этих данных в следующий текстовый файл.

Я попытался записать все из строки.Я попытался [cnt% 2] получить то, что ожидал.

   line = fp.readline()
   fw = open('output.txt', "w+")
   cnt = 1
   while line:
       print("Line {}: {}".format(cnt, line.strip()))
       line = fp.readline()
       line = line.split(')')[0]
       fw.write(line + "\n")
       cnt += 1

Пример из текстового файла, который я читаю из.

WELD 190 Производство I Введение в MasterCAM (3) 1½ часалекция - лаборатория 4,5 часа. Примечание. Крестик указан как DT 190 / ENGR 190 / IT 190. Этот курс познакомит студентов с MasterCAM, 2D и базовым 3D-моделированием.Студенты получат инструкции и чертежи деталей, требующих 2- или 3-осевой обработки.Учащиеся будут проектировать, моделировать, программировать, настраивать и запускать свои детали на различных станках, включая плазменные, водоструйные и фрезерные станки.WELD 197 Темы по сварочным технологиям (.5 - 3)

Я очень далек от того, чтобы фактически эффективно очистить эти данные, но я пытаюсь начать.

Моя цель - извлечьтолько имя класса и номер и удалить описания.

Спасибо, как всегда!

Ответы [ 2 ]

1 голос
/ 21 сентября 2019

Предполагая, что ваши другие текстовые блоки класса имеют ту же структуру, что и показанная вами, вы можете использовать регулярное выражение для извлечения имени класса и номера класса:

После я предполагаючто каждый текстовый блок содержит информацию «XX часов лекций» в том же порядке, где «XX» обозначает любой вид числа (временной интервал).В переменной «match_re» я определяю регулярное совпадающее выражение, которое соответствует только определенному месту «XX часов лекции».И с помощью 'match.group (2)' я ограничиваю свое соответствие частью в самой внутренней паре скобок.

Соответствующее выражение, приведенное ниже, вероятно, еще не будет для вас полным, поскольку я не знаю весь ваш текстовый файл.

Ниже я извлекаю строку: WELD 190 Производство I Введениев MasterCAM (3)

import re

string = "WELD 190 Manufacturing I Introduction to MasterCAM (3) 1½ hours lecture - 4½ hours laboratory Note: Cross listed as DT 190/ENGR 190/IT 190 This course will introduce the students to MasterCAM and 2D and basic 3D modeling. Students will receive instructions and drawings of parts requiring 2- or 3-axis machining. Students will design, model, program, set-up and run their parts on various machines, including plasma cutters, water jet cutters and milling machines. WELD 197 Welding Technology Topics (.5 - 3)"

match_re = "(^(.*)\d.* hours lecture)"
match = re.search(match_re,string)
if match:
    print(match.group(2))
else:
    print("No match")
1 голос
/ 21 сентября 2019

Я полагаю, что для решения вашей текущей проблемы, если вы пытаетесь только проанализировать одну строку, вам просто нужно переместить вторую строку line = fp.readline() в конец цикла while.В настоящее время вы фактически начинаете синтаксический анализ со второй строки, потому что вы уже использовали readline в первой строке вашего примера кода.

После изменения это будет выглядеть так:

   line = fp.readline() # read in the first line
   fw = open('output.txt', "w+")
   cnt = 1
   while line:
       print("Line {}: {}".format(cnt, line.strip()))
       line = line.split(')')[0]
       fw.write(line + "\n")
       cnt += 1
       line = fp.readline() # read in next line after parsing done

Вывод для вашего примера входного текста:

WELD 190 Производство I Введение в MasterCAM (3

...