2016-11-14 2 views
0

У меня есть требование, где мне нужно преобразовать текстовые файлы в csv и использовать python для этого. Мой текстовый файл выглядит так,Преобразование текстового файла в файл csv с использованием python

Employee Name : XXXXX 
Employee Number : 12345 
Age : 45 
Hobbies: Tennis 
Employee Name: xxx 
Employee Number :123456 
Hobbies : Football 

Я хочу, чтобы мой файл CSV, чтобы имена столбцов, как имя сотрудника, номер сотрудника, возраст и хобби и когда конкретное значение нет, то должно иметь значение NA в это особое место. Любые простые решения для этого? Заранее спасибо

+0

Вы могли бы показать, что искали? – Alex

+0

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

+0

Будет ли более чем одна запись в ваших реальных данных? Как разделяются два набора свойств? –

ответ

0

Вы можете сделать что-то вроде этого:

records = """Employee Name : XXXXX 
Employee Number : 12345 
Age : 45 
Hobbies: Tennis 
Employee Name: xxx 
Employee Number :123456 
Hobbies : Football""" 

for record in records.split('Employee Name'): 
    fields = record.split('\n') 
    name = 'NA' 
    number = 'NA' 
    age = 'NA' 
    hobbies = 'NA' 
    for field in fields: 
     field_name, field_value = field.split(':') 
     if field_name == "": # This is employee name, since we split on it 
      name = field_value 
     if field_name == "Employee Number": 
      number = field_value 
     if field_name == "Age": 
      age = field_value 
     if field_name == "Hobbies": 
      hobbies = field_value 

Конечно, это метод предполагает, что в каждой записи есть (по крайней мере) Employee Name.

+0

Большое спасибо. Только то, что мне было нужно. –

0

Возможно, вам это поможет? Это всего лишь статический вывод данных первого сотрудника. Теперь вам нужно обернуть это в какую-то итерацию по файлу. Существует очень и очень вероятно, более элегантное решение, но это, как вы могли бы сделать это без единого оператора импорта;)

with open('test.txt', 'r') as f: 
    content = f.readlines() 
    output_line = "".join([line.split(':')[1].replace('\n',';').strip() for line in content[0:4]]) 
    print(output_line) 
+0

Извините, приятель. Я не мог понять. Я не понимаю логики. Я новичок в этом. Если возможно, вы можете точно написать код для моего требования, и я попытаюсь понять, что 1-й, а затем создать для моего бизнеса требования. Спасибо за вашу помощь! –

0

Я выполнил очень простые шаги для этого и может быть не оптимальным, но решает проблему. Важным случаем здесь я вижу, что в одном файле может быть несколько ключей («Имя сотрудника» и т. Д.). Этапы

  1. Просмотреть файл txt в списке строк.
  2. список новообращенного Сыроватское (логика может быть более улучшенной или сложные лямбды могут быть добавлены здесь)
  3. Просто используйте панд для преобразования Dict в CSV

Ниже приведен код,

import pandas 

etxt_file = r"test.txt" 
txt = open(txt_file, "r") 
txt_string = txt.read() 


txt_lines = txt_string.split("\n") 
txt_dict = {} 


for txt_line in txt_lines: 
    k,v = txt_line.split(":") 
    k = k.strip() 
    v = v.strip() 
    if txt_dict.has_key(k): 
     list = txt_dict.get(k) 
    else: 
     list = [] 
    list.append(v) 
    txt_dict[k]=list 

print pandas.DataFrame.from_dict(txt_dict, orient="index") 

Выход:

     0   1 
Employee Number 12345 123456 
Age     45  None 
Employee Name  XXXXX  xxx 
Hobbies   Tennis Football 

Надеюсь, это поможет.