В основном исходные данные не имеют заголовков, а только значения (но у меня есть список заголовков). Разделителем является "|". Теперь я пытаюсь преобразовать txt файл в файл csv, используя. Файл csv содержит заголовки, которые у меня есть, и соответствующие значения.
Например:
txt файл выглядит так:
sadasd | dsdads | adsasd
значение 1 | значение 2 | значение 3 | значение 4 | значение 5 | значение 100 | значение 101 | значение 102 | значение 103 | значение 104 | значение 105 значение 200 | значение 201 | значение 202 | значение 203 | значение 204 | значение 205
sdasd | АДС | dsdad
и после преобразования CSV файла будет выглядеть так:
заголовок 1, заголовок 2, заголовок 3, заголовок 4, заголовок 5,
значение 1, значение 2, значение 3, значение 4, значение 5,
значение 100, значение 101, значение 102, значение 103, значение 104, значение 105
значение 200, значение 201, значение 202, значение 203, значение 204, значение 205
Я только начинаю изучать питон и то, что моя идея:
удалить первую и последнюю строку.
используйте список словарей: каждый столбец представляет собой список с ключом (заголовок у меня есть). к кадру данных
конвертировать в.csv
поэтому он выглядит как {'header 1': [значение 1, значение 100, значение 200], 'header 2': [значение 2, значение 101, значение 201]. а затем преобразовать в.csv.
Это только моя мысль, или у вас самый простой способ, но только с использованием python.
Сшивание с частей в stackoverflow дает следующее решение
import pandas as pd
mycolnames = ['col1','col2','col3','col4','col5']
# Use the sep argument to change your delimiter accordingly
df = pd.read_csv("foo.txt", sep="|")
# Set your column names to the data frame
df.columns = mycolnames
# Write your desired columns to csv
df['col1'].to_csv("bar.csv", sep=",")
кредиты
@atomh33ls - Как читать csv в массив записей в numpy?
@LangeHaare - установить имена столбцов в кадре данных pandas from_dict с ориентацией = 'index'
Использование модуля csv
Пример:
import csv
with open(filename, "r") as infile:
data = []
for i in infile.readlines()[1:-1]: #Strip first and last line.
if i.strip():
data.extend(i.strip().split("|"))
data = [data[i:i+5] for i in range(0, len(data), 5)] #Split list to sub-list of 5 elements
print(data)
header = ["header 1","header 2", "header 3", "header 4", "header 5"]
with open(outfile, "w") as outfile: #Output CSV file
writer = csv.writer(outfile, delimiter=",")
writer.writerow(header) #Write Header
writer.writerows(data) #Write content.