2016-05-22 3 views
-3

Я очень новичок в python. У меня есть .txt-файл и вы хотите преобразовать его в CSV-файл с форматом, который мне рассказывали, но выполнить его не удалось. рука может быть полезна для него. Я собираюсь объяснить это скриншотами.запись данных в текстовый файл при преобразовании его в csv

У меня есть txt-файл с именем bip.txt. и данные внутри него является like this

Я хочу, чтобы преобразовать его в формат CSV, как this csv file

до сих пор, что я мог сделать, это только писать все данные из текстового файла с этим кодом:

read_files = glob.glob("C:/Users/Emrehana1/Desktop/bip.txt") 

with open("C:/Users/Emrehana1/Desktop/Test_Result_Report.csv", "w") as outfile: 
    for f in read_files: 
     with open(f, "r") as infile: 
      outfile.write(infile.read()) 

Итак, есть ли решение для преобразования его в CSV-файл в желаемом формате? Надеюсь, я объяснил это четко.

+1

Пожалуйста, уделите минутку, чтобы преобразовать эти снимки экрана в текстовые примеры в ваш вопрос. – tdelaney

+1

Вы должны использовать библиотеку Python ** csv **, см. Https://docs.python.org/2/library/csv.html (Например, версия Python 2) или https://docs.python.org/3/library/csv.html для Python 3. – paisanco

+0

Почему вы пытаетесь обработать несколько входных файлов с помощью 'for f в read_files:' петля, учитывая, что есть только одна? Даже если их было больше, в выходном файле 'Test_Result_Report.csv' будет выводиться только выход из последнего. Мне не кажется, что вы много думали или пытались решить проблему. Предложите, чтобы вы прочитали [_ Сколько ожидается усилий по исследованию пользователей переполнения стека? _) (Http://meta.stackoverflow.com/questions/261592/how-much-research-effort-is-expected-of-stack-overflow- пользователи) – martineau

ответ

1

Нет необходимости использовать модуль glob, если у вас есть только один файл, и вы уже знаете его имя. Вы можете просто открыть его. Было бы полезно привести ваши данные в виде текста, поскольку в качестве изображения кто-то, кто хочет помочь вам, не может просто скопировать и вставить ваши входные данные.

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

Один из способов заключается в цикле по линиям ввода до тех пор, пока не найдете тот, который начинается с «тест:», а затем получить следующую строку в файл, используя next() создать запись:

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

with open("/tmp/blip.txt") as f: 
    for line in f: 
     if line.startswith("test:"): 
      test_name = line.strip().split(None, 1)[1] 
      result = next(f) 
      if not result.startswith("outcome:"): 
       raise ValueError("Test name not followed by outcome for test "+test_name) 
      outcome = result.strip().split(None, 1)[1] 
      print test_name, outcome 
+0

, это отлично сработало для меня. Я ценю помощь. – Emrehan

+0

Отлично! Удачи и приветствуем переполнение стека – holdenweb

0

Вы не используете функцию glob для открытия файла, он ищет имена файлов, соответствующие шаблону. вы можете открыть файл bip.txt, затем прочитать каждую строку и поместить значение в массив, затем, когда все значения будут найдены, присоедините их к новой строке и запятой и напишите в файл csv, например:

# set the csv column headers 
values = [["test", "outcome"]] 

current_row = [] 
with open("bip.txt", "r") as f: 
    for line in f: 
     # when a blank line is found, append the row 
     if line == "\n" and current_row != []: 
      values.append(current_row) 
      current_row = [] 

     if ":" in line: 
      # get the value after the semicolon 
      value = line[line.index(":")+1:].strip() 
      current_row.append(value) 
    # append the final row to the list 
    values.append(current_row) 


# join the columns with a comma and the rows with a new line 
csv_result = "" 
for row in values: 
    csv_result += ",".join(row) + "\n" 

# output the csv data to a file 
with open("Test_Result_Report.csv", "w") as f: 
    f.write(csv_result) 
Смежные вопросы