Как вывести определенные символы c из строки в столбец? - PullRequest
0 голосов
/ 10 июля 2020

У меня есть входной файл, который многократно содержит данные в одном и том же формате в 5 строках. Мне нужно отформатировать эти данные в одну строку (файл CSV) и иметь только несколько полей, относящихся ко мне. Как мне достичь упомянутого результата с помощью предоставленного входного файла.

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

Примечание 2 - Я тоже очень заинтересован в этом форуме и прошу прощения, если я сделал какую-либо публикацию при отправке своего запроса.

Вход - Входной файл

Выход - Выходной файл

import itertools, csv

mylines, first_items, new_list, new_list2, new_list_n = [], [], [], [], []
with open ('H:/Giri/REP02.txt', 'rt') as myfile:
    contents = myfile.read()
    slice = contents.split('RRC      RSN')
    slice_length = (len(slice))-1
    
print(slice[1])

for i in range(1, slice_length):
    first = slice[i]
    first_items = first.split(' ')
    
    if i<=(slice_length/2):
        new_list.append(list(filter(None, first_items)))
    else:
        new_list2.append(list(filter(None, first_items)))

for element in new_list:
    for element2 in element:
        new_list_n.append(element2.strip())
    
print(new_list_n)

#new_list2 = [x.replace('\n', '').replace(' ', '') for x in new_list2]
fp = open('H:/Giri/REP02_a.csv', 'w', '\n')
myFile = csv.writer(fp)
#myFile.writerow(columns)
#myFile.writerows(rows)
for word in new_list:
    myFile.writerow(word)
fp.close()

1 Ответ

0 голосов
/ 10 июля 2020

Вы должны прочитать файл и проанализировать его вручную, а затем использовать модуль csv, чтобы записать его в файл .csv:

import re

with open('myfile.txt', 'r') as f:
    lines = f.readlines()

# divide on whitespace characters, but not single spaces
lines = [re.split("\s\s+", line) for line in lines]

with open('output.csv', 'w', newline='') as csvfile:
    writer = csv.writer(csvfile, delimiter=' ', quotechar='|', quoting=csv.QUOTE_MINIMAL)
    for line in lines:
        writer.writerow(lines)

Но это будет включать каждая часть данных. Вы можете перебрать lines и удалить поля, которые не хотите сохранять. Итак, прежде чем писать csv, вы можете сделать:

def filter_line(line):
    # see how the input file was parsed
    print(line)
    # for example, only keep the first 2 columns
    return [line[0], line[1]]

lines = [filter_line(line) for line in lines]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...