Привязка данных файла с именами столбцов - PullRequest
0 голосов
/ 28 декабря 2018

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

import re
import glob
filenames = glob.glob("/home/ashfaque/Desktop/filetocsvsample/inputfiles/*.txt")
columns = []
with open("/home/ashfaque/Downloads/coulmn names.txt",encoding = "ISO-8859-1") as f:
    file_data = f.read()
    lines = file_data.splitlines()
    for l in lines:
        columns.append(l.rstrip())

total = {}
for name in filenames:
    modified_data = []
    with open(name,encoding = "ISO-8859-1") as f:
        file_data = f.read()
        lines = file_data.splitlines()
        for l in lines:
            if len(l) >= 1:
                modified_data.append(re.split(': |,',l))
    rows = []
    i = len(modified_data)
    x = 0
    while i > 60:
        r = lines[x:x+59]
        x = x + 60
        i = i - 60
        rows.append(r)
    z = len(modified_data)
    while z >= 60:
        z = z - 60
    if z > 1:
        last_columns = modified_data[-z:]
    x = []
    for l in last_columns:
        if len(l) > 1:
            del l[0]
            x.append(l)
        elif len(l) == 1:
            x.append(l)
    for row in rows:
        for vl in x:
            row.append(vl)
    for r in rows:
        for i in range(0,len(r)):
            if len(r) >= 60:
                total.setdefault(columns[i],[]).append(r[i])

В другом скрипте я разделил обе строки с 60 значениями, а последние 5–15 столбцов, которые должны быть добавлены с строкой, являются отдельными, но опять-таки я запутался, каксвязать все данные.Данные должны выглядеть следующим образом после привязки. outputdata.xlsx Файл ввода данных: inputdata.txt

Что мне здесь не хватает?любой инструмент?

1 Ответ

0 голосов
/ 28 декабря 2018

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

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

Затем с каждой сгенерированной строкой янапишите это непосредственно в CSV.Это должно поддерживать требования к памяти для этого процесса довольно низкими.

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

import csv

OUTPUT_FILE = "/home/ashfaque/Desktop/File handling/outputfile.csv"
INPUT_FILE = "/home/ashfaque/Desktop/File handling/inputfile.txt"


# This is a generator that will pull only num number of items into
# memory at a time, before it yields the row.
def get_rows(path, num):
    row = []
    with open(path, "r", encoding="ISO-8859-1") as f:
        for n, l in enumerate(f):
            # apply whatever transformations that you need to here.
            row.append(l.rstrip())
            if (n + 1) % num == 0:
                # if rows need padding then do it here.
                yield row
                row = []


with open(OUTPUT_FILE, "w") as output:
    csv_writer = csv.writer(output)
    for r in get_rows(INPUT_FILE, 60):
        csv_writer.writerow(r)
...