Преобразовать текстовый файл с разделителями табуляции в CSV-файл через запятую - PullRequest
0 голосов
/ 03 марта 2019

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

antecedents    consequents    support    confidence    lift
-------------  -------------  ---------  ------------  ------
  398  frozenset(['LM = 25', 'DIAB = n', 'SMOK = y'])     frozenset(['AL = 1'])       0.25             1  1.33333
  461  frozenset(['Age = 80', 'LM = 15', 'CHOL = 200'])   frozenset(['AL = 1'])       0.25             1  1.33333
  837  frozenset(['RCA = 80', 'Age = 80', 'SMOK = y'])    frozenset(['AL = 1'])       0.25             1  1.33333

Я применил pandas и csv, но он не разделяет столбцы, он только разделяет raws, как это

antecedents    consequents    support    confidence    lift
-------------  -------------  ---------  ------------  ------
"  398  frozenset(['LM = 25', 'DIAB = n', 'SMOK = y'])     frozenset(['AL = 1'])       0.25             1  1.33333"
"  461  frozenset(['Age = 80', 'LM = 15', 'CHOL = 200'])   frozenset(['AL = 1'])       0.25             1  1.33333"
"  837  frozenset(['RCA = 80', 'Age = 80', 'SMOK = y'])    frozenset(['AL = 1'])       0.25             1  1.33333"

Это код, который я использовал 1-

dataframe = pd.read_csv("/Users/user/PycharmProjects/Apriori /Rules.txt",delimiter="\t")
dataframe.to_csv("newDoc.csv", encoding='utf-8', index=False)

2-

txt_file = r"/Users/user/PycharmProjects/Apriori /Rules.txt"
csv_file = r"mycsv.csv"

in_txt = csv.reader(open(txt_file, "rb"), delimiter = '\t')
out_csv = csv.writer(open(csv_file, 'wb'))

out_csv.writerows(in_txt)

Любая помощь, пожалуйста?

1 Ответ

0 голосов
/ 03 марта 2019

Учитывая строки, это выглядит так, как будто вы можете использовать регулярное выражение для захвата пяти полей.Что-то вроде:

import csv
import re

# looks like a consistent format given the example text:
line_re = re.compile('^\s*(\d+)\s+(frozenset.*?\))\s*(frozenset.*?\))\s*(\S+)\s+(\S+)\s+(\S+)$')
txt = '''antecedents    consequents    support    confidence    lift
-------------  -------------  ---------  ------------  ------
  398  frozenset(['LM = 25', 'DIAB = n', 'SMOK = y'])     frozenset(['AL = 1'])       0.25             1  1.33333
  461  frozenset(['Age = 80', 'LM = 15', 'CHOL = 200'])   frozenset(['AL = 1'])       0.25             1  1.33333
  837  frozenset(['RCA = 80', 'Age = 80', 'SMOK = y'])    frozenset(['AL = 1'])       0.25             1  1.33333'''

with open('mycsv.csv', 'w') as f:
    writer = csv.writer(f)
    for line in txt.splitlines():
        mo = line_re.match(line)
        if mo:
            writer.writerow(mo.groups())


cat mycsv.csv
398,"frozenset(['LM = 25', 'DIAB = n', 'SMOK = y'])",frozenset(['AL = 1']),0.25,1,1.33333
461,"frozenset(['Age = 80', 'LM = 15', 'CHOL = 200'])",frozenset(['AL = 1']),0.25,1,1.33333
837,"frozenset(['RCA = 80', 'Age = 80', 'SMOK = y'])",frozenset(['AL = 1']),0.25,1,1.33333
...