Как использовать Python для чтения текстового файла в CSV, выбирая определенные части - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть текстовый файл, который выглядит следующим образом:

Текущее название должности:
метр инженер
Текущая зарплата:
£ 30 000
Опыт работы:
2 года
Желаемое местоположение:
Не указано
Желаемая должность:
Интеллектуальный счетчик
Желаемая заработная плата:
£ 30000
Тип работы:
Постоянная |Контракт |Temp

Текущее должность:
инженер по двухметровым интеллектуальным счетчикам
Текущая зарплата:
£ 30 000
Опыт работы:
4 года
Желаемое место нахождения:
Не указано
Желаемая должность:
Не указано
Желаемая заработная плата:
£ 34,999
Тип работы:
Постоянная должность |Контракт |Temp

каждая строка разделена новой строкой, а наборы данных разделены пробелом. Я хочу использовать python для извлечения данных под заголовками.Например: Текущее название работы: метр инженер будет указывать в столбце Текущее название работы.Затем возьмите следующий набор и поместите их в следующую строку

Как мне добиться этого с помощью Python?

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

 f = open("test.txt", "r")
 lines = f.readlines()
 for line in lines:
    print(line)

Ответы [ 3 ]

0 голосов
/ 19 сентября 2019

Сначала вам нужно будет реструктурировать данные, прежде чем преобразовать их в формат csv.

Попробуйте:

import csv
from collections import OrderedDict

with open('data.txt', 'r') as data, open('output.csv', 'w') as file:
  rows = data.read().split('\n\n')
  output = [
    OrderedDict(
      (k.rstrip(':'), v) for k, v in zip(row.split('\n')[::2], row.split('\n')[1::2])
    ) 
    for row in rows
  ]
  writer = csv.DictWriter(file, fieldnames=output[0].keys(), lineterminator='\n')
  writer.writeheader()
  writer.writerows(output)

Образец повтора

Вывод:

Current job title,Current salary,Experience,Desired location,Desired job title,Desired salary,Job Type
meter engineer,"£30,000",2 years,Not supplied,smart meter engineer,"£30,000",Permanent | Contract | Temp
dual fuel smart meter engineer,"£30,000",4 years,Not supplied,Not supplied,"£34,999",Permanent | Contract | Temp

Обратите внимание, что вам нужно использовать OrderedDict, поскольку объекты словаря не упорядочены в python 2.7 и могут вызвать проблемы для вашего файла csv.Соответствующий псевдо OrderedDict понимание было вдохновлено этим ответом здесь: Есть ли понимание OrderedDict?

Как примечание - Python 2.7 закатывается.Вам действительно стоит подумать о переносе вашего проекта на базу Python 3.x.

0 голосов
/ 19 сентября 2019

Этот код является базовым, но он может просто помочь.Все, что он делает, это читает строку, которая найдена как та, на которой есть данные.Он знает, какая строка включена, потому что он предполагает именно этот пример.

 f = open("test.txt", "r")

if f.mode == 'r': 

  repeat = f.find('Current job title:') #this give how many times 'Current job title is found in the program'

  while repeat >= 1:

    repeat = repeat - 1 #changes repeat by -1 every time you do this counting how many times you run this loop

    print("Job Title:")          #Finds and sets JobTitle to the title of job stated
    JobTitle = f.readline(repeat * 15 - 13)

    print(JobTitle)   #Prints Job Title

    print("Current salary:")            #Repeat from Above
    Pay = f.readline(repeat * 15 - 11)
    print(Pay)
0 голосов
/ 19 сентября 2019
import csv

with open('test.csv', 'rU') as infile:
  reader = csv.DictReader(infile)
  data = {}
  for row in reader:
    for header, value in row.items():
      try:
        data[header].append(value)
      except KeyError:
        data[header] = [value]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...